SpringCloud配置刷新

配置引用

  • 在Bean的Field上使用@Value("${xx.xxx.xx}")方式引用配置文件中的变量,Spring会自动进行注入和支持刷新
  • 使用@ConfigProperties的方式定义配置Bean
  • 通过@RefreshScope标注需要在配置改变时重新刷新的Bean,Spring在将此类Bean诸如到其他Bean中时,动态生成代理而非使用原始Bean对象,以便支持刷新
  • 具体参考Spring Boot的相关文档

单节点刷新

在pom.xml中添加spring-boot-starter-actuator依赖后,会自动导出/admin/refresh端点。

更改本地配置文件或配置中心git上的配置后,可以使用curl -x POST http://ip:port/服务名/admin/refresh的方式进行刷新。

总线刷新

在Config-Server中添加如下依赖:

<!--配置刷新-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
并配置:
spring.cloud.bus.enabled=true
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=service
spring.rabbitmq.password=密码
spring.rabbitmq.virtualHost=/svr

在业务模块中,同样添加上述依赖和配置。

然后在将新的配置提交到配置中心的git上后

curl -x POST -u 配置中心用户:密码 http://配置中ip:8888/admin/bus/refresh?destination=<过滤条件> 进行配置刷新。

其中:

  • 如果没有destination参数,则表示刷新所有应用实例
  • 过滤条件可以使用服务名:**的方式,如userprofile:**  即?destination=userprofile:**
  • 过滤条件可以指定具体的Spring AppliactionContextID,但默认情况下同一个服务的ContextID相同(除非是不同端口或profiles启动)

注:由于ContextID问题,config-server本身不支持一次全部刷新,需要单个操作

猜你喜欢

转载自blog.csdn.net/qq_33315102/article/details/80586818