11.6 手动刷新配置
-
将本地仓库的application.yml文件修改下信息,在提交到仓库上去,也可以在gitee上进行编辑
-
然后在不重启配置中心microservice-cloud-config-server-8016服务前提下,浏览器访问http://localhost:8016/master/application-dev.yml,结果如下:
-
可以看出配置中心已经成功地获取到了修改后的配置。
-
同样在不重启客户端microservice-cloud-config-client-8017服务前提下,浏览器访问http://localhost:8017/getInfo,尝试通过 Spring Cloud Config 客户端获取修改后的配置信息。结果如下:
-
这次重启客户端microservice-cloud-config-client-8017服务前提下,浏览器访问http://localhost:8017/getInfo。结果如下:
-
由此可以看出
配置更新后,Config Server可以直接从 Git 仓库中获取最新的配置。
必须重启 Spring Cloud Config 客户端(Client),重新连接Config Server配置中心,否则无法通过 Spring Cloud Config 服务端获取最新的配置信息。
-
要解决不重启 Config 客户端无法获取最新配置的问题,接下来,我们就对 microservice-cloud-config-client-8017进行修改,修改如下。
-
我们需要让Config 客户端监控到配置文件的变化那就需要spring-boot-starter-actuator依赖的支持,这就是导入此依赖的目的
-
在配置文件 bootstrap.yml 中添加以下配置,对外暴露 Spring Boot actuator 的监控节点。
# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
management:
endpoints:
web:
exposure:
include: "*" #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号
#include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥health,info,hystrix:stream
- Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查,审计,指标收集,HTTP 跟踪等,帮助我们监控和管理Spring Boot 应用。
- 能采集应用内部信息暴露给外部的模块,上述的功能都可以通过HTTP 和 JMX 访问,所以Actuator 也可以和一些外部的应用监控系统整合,提供仪表板,图形,分析和警报等界面,监视和管理应用程序。如果使用不当或者一些不经意的疏忽,可能造成信息泄露等严重的安全隐患。
- Actuator 内置的端点Endpoints类型,它用来监视应用程序及交互,也允许我们自己扩展自己的 Endpoints
Http方法 | Endpoint | 介绍 |
---|---|---|
get | /autoconfig | 记录哪些自动配置的使用情况 |
get | /beans | 查看应用程序上下文里的Bean列表,以及它们的关系 |
get | /metrics | 查看应用程序所有度量信息,如内存用量和HTTP请求计数 |
get | /metrics/{name} | 查看应用程序具体度量信息 |
get | /dump | 打印线程活动的快照 |
get | /mappings | 查看所有url映射,以及它们和控制器(包含Actuator端点)的映射关系(最好不打开,对外暴露了接口地址,易受攻击) |
get | /health | 查看程序的健康指标,这些值由HealthIndicator的实现类提供 |
get | /info | 查看应用程序的自定义信息,这些信息由info打头的属性提供。 |
get | /trace | 查看基本追踪信息,通过访问/trace路径,可获取用户认证字段信息,如token,cookie 等重要权限验证信息(关闭) |
get | /heapdump | 访问/heapdump 路径,返回 gzip 压缩 hprof 堆转储文件。在 Android studio 打开,会泄露站点内存信息,很多时候会包含后台用户的账号密码 |
get | /configprops | 查看属性配置,包括默认值,如何注入Bean。容易暴露ip地址,eureka地址,endpoints哪些可访问等(关闭,容易泄露其他注册信息) |
get | /env | 查看所有环境变量,像操作系统信息,虚拟机信息,应用信息,用户信息,三方服务信息(关闭) |
get | /env | 查看具体环境变量 |
post | /shutdown | 关闭应用,(关闭,否则可远程关闭应用) |
get | /loggers | 查看所有包的日志级别,默认为info,可动态修改 |
断点关闭格式endpoints.env.enabled=true
新版本可配置端点,在集成了spring-boot-starter-actuator的项目中访问http://localhost:8017/actuator可以显示全部的可配置端点
<!-- Spring Boot 监控模块,完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
{ "_links": { "self": { "href": "http://localhost:8017/actuator", "templated": false }, "archaius": { "href": "http://localhost:8017/actuator/archaius", "templated": false }, "beans": { "href": "http://localhost:8017/actuator/beans", "templated": false }, "caches-cache": { "href": "http://localhost:8017/actuator/caches/{cache}", "templated": true }, "caches": { "href": "http://localhost:8017/actuator/caches", "templated": false }, "health": { "href": "http://localhost:8017/actuator/health", "templated": false }, "health-path": { "href": "http://localhost:8017/actuator/health/{*path}", "templated": true }, "info": { "href": "http://localhost:8017/actuator/info", "templated": false }, "conditions": { "href": "http://localhost:8017/actuator/conditions", "templated": false }, "configprops": { "href": "http://localhost:8017/actuator/configprops", "templated": false }, "configprops-prefix": { "href": "http://localhost:8017/actuator/configprops/{prefix}", "templated": true }, "env": { "href": "http://localhost:8017/actuator/env", "templated": false }, "env-toMatch": { "href": "http://localhost:8017/actuator/env/{toMatch}", "templated": true }, "integrationgraph": { "href": "http://localhost:8017/actuator/integrationgraph", "templated": false }, "loggers": { "href": "http://localhost:8017/actuator/loggers", "templated": false }, "loggers-name": { "href": "http://localhost:8017/actuator/loggers/{name}", "templated": true }, "heapdump": { "href": "http://localhost:8017/actuator/heapdump", "templated": false }, "threaddump": { "href": "http://localhost:8017/actuator/threaddump", "templated": false }, "metrics-requiredMetricName": { "href": "http://localhost:8017/actuator/metrics/{requiredMetricName}", "templated": true }, "metrics": { "href": "http://localhost:8017/actuator/metrics", "templated": false }, "scheduledtasks": { "href": "http://localhost:8017/actuator/scheduledtasks", "templated": false }, "mappings": { "href": "http://localhost:8017/actuator/mappings", "templated": false }, "refresh": { "href": "http://localhost:8017/actuator/refresh", "templated": false }, "busenv-destinations": { "href": "http://localhost:8017/actuator/busenv/{*destinations}", "templated": true }, "busenv": { "href": "http://localhost:8017/actuator/busenv", "templated": false }, "busrefresh": { "href": "http://localhost:8017/actuator/busrefresh", "templated": false }, "busrefresh-destinations": { "href": "http://localhost:8017/actuator/busrefresh/{*destinations}", "templated": true }, "features": { "href": "http://localhost:8017/actuator/features", "templated": false }, "serviceregistry": { "href": "http://localhost:8017/actuator/serviceregistry", "templated": false }, "functions": { "href": "http://localhost:8017/actuator/functions", "templated": false }, "bindings-name": { "href": "http://localhost:8017/actuator/bindings/{name}", "templated": true }, "bindings": { "href": "http://localhost:8017/actuator/bindings", "templated": false }, "channels": { "href": "http://localhost:8017/actuator/channels", "templated": false } } }
- 在 ConfigClientController 类上使用 @RefreshScope 注解开启配置刷新,代码如下
package com.example.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 读取配置中心指定配置文件的内容,并展示到页面
* 为了让手动(也是一种动态方式,不重启服务)的获取最新的git 配置,在添加 actuator 监控加载 RefreshScope,
*/
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${server.port}")
private String port;
@Value("${spring.application.name}")
private String applicationName;
@Value("${config.info}")
private String info;
@Value("${config.version}")
private String version;
@GetMapping("/getInfo")
public String getInfo(){
return "applicationName is:"+applicationName+" <br/>port is:"+port+"<br/>info is:"+info+"<br/>version is"+version;
}
}
- 重启 microservice-cloud-config-client-8017,再次修改本地仓库的application.yml文件信息,在提交到仓库上去
- 修改前
- 修改后
- 使用浏览器再次访问“http://localhost:8017/getInfo”,结果如下图。
- 发现还是无法直接获取到最新配置,这需要,打开命令行窗口,手动的使用以下命令发送一个 POST 请求刷新 Client 8017客户端,通知客户端配置文件已经修改,需要重新拉去配置。
curl -X POST "http://localhost:8017/actuator/refresh"
- 使用浏览器再次访问“http://localhost:8017/getInfo”,结果如下图。
问题记录:在使用TortoiseGit工具(小乌龟)向远程仓库推送文件的时候会报错 no supported authentication methods avaiable错误
原因:TortoiseGit的网络设置里面,SSH客户端使用了自己的TortoiseGitPlink.exe工具,不是git的,而TortoiseGit和Git冲突。
- TortoiseGit安装后,右键-TortoiseGit-设置-网络
- 将SSH client指向E:\software\Git**\usr\bin\ssh.exe**
- 设置后点击应用,然后提交文件到仓库,结果如下:
下一篇:SpringCloud-31-Spring Cloud Config+Bus 实现配置的动态刷新
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123794.html