springcloud实战之14动态刷新分布式配置中心属性配置(config)

深碍√TFBOYSˉ_ 2022-06-03 07:09 378阅读 1赞

springcloud实战之10 分布式配置中心(config)介绍了如何用spring cloud config和git仓库读取配置文件,当配置文件里的属性发生变化,按照以往的惯例,必须重启服务才能够读取到新的配置属性。但springcloud config为我们提供了springcloud bus(消息总线)能够实现动态刷新配置文件。

重构(springcloud-server-config)工程

添加依赖

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.9.RELEASE</version>
  5. <relativePath />
  6. </parent>
  7. <dependencyManagement>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.cloud</groupId>
  11. <artifactId>spring-cloud-dependencies</artifactId>
  12. <version>Edgware.RELEASE</version>
  13. <type>pom</type>
  14. <scope>import</scope>
  15. </dependency>
  16. </dependencies>
  17. </dependencyManagement>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.cloud</groupId>
  21. <artifactId>spring-cloud-config-server</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-eureka</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-actuator</artifactId>
  34. </dependency>
  35. </dependencies>

改造入口类

  1. @SpringBootApplication
  2. @EnableConfigServer
  3. @EnableDiscoveryClient
  4. public class SpringCloudServerConfigApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(SpringCloudServerConfigApplication.class,args) ;
  7. }
  8. }

修改配置文件

  1. server:
  2. port: 8001
  3. management:
  4. security:
  5. enabled: false
  6. spring:
  7. application:
  8. name: springcloud-server-config
  9. cloud:
  10. config:
  11. server:
  12. git:
  13. uri: https://github.com/shiyuan2he/springcloud
  14. search-paths: springcloud-repo-config
  15. username:
  16. password:
  17. force-pull: true
  18. label: master
  19. rabbitmq:
  20. host: 192.168.175.128
  21. port: 5672
  22. username: admin
  23. password: admin
  24. eureka:
  25. client:
  26. service-url:
  27. defaultZone: http://peer1:8080/eureka/

重构springcloud-service-config项目

添加依赖

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.9.RELEASE</version>
  5. <relativePath />
  6. </parent>
  7. <dependencyManagement>
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.springframework.cloud</groupId>
  11. <artifactId>spring-cloud-dependencies</artifactId>
  12. <version>Edgware.RELEASE</version>
  13. <type>pom</type>
  14. <scope>import</scope>
  15. </dependency>
  16. </dependencies>
  17. </dependencyManagement>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.cloud</groupId>
  21. <artifactId>spring-cloud-starter-config</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-eureka</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.cloud</groupId>
  33. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-actuator</artifactId>
  38. </dependency>
  39. </dependencies>

重构入口类

  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. public class SpringCloudServiceConfigApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(SpringCloudServiceConfigApplication.class,args) ;
  6. }
  7. }

改造web层接口

  1. @RestController
  2. @RefreshScope
  3. @RequestMapping(value = "/api/rest")
  4. public class RestfulController {
  5. @Value("${user.name}")
  6. String name;
  7. @Value("${user.age}")
  8. String age ;
  9. @GetMapping("/name")
  10. public String getName(){
  11. return name +":"+ age;
  12. }
  13. }

新建配置文件bootstrap.properties

  1. spring.application.name=springcloud-service-config
  2. spring.cloud.config.label=master
  3. spring.cloud.config.profile=dev
  4. spring.cloud.config.uri= http://localhost:8001/
  5. server.port=8003
  6. eureka.client.serviceUrl.defaultZone=http://peer1:8080/eureka/
  7. ## 从配置中心读取文件
  8. spring.cloud.config.discovery.enabled=true
  9. ## 配置中心的servieId,即服务名。
  10. spring.cloud.config.discovery.serviceId=springcloud-server-config
  11. spring.cloud.config.fail-fast=true
  12. spring.rabbitmq.host=192.168.175.128
  13. spring.rabbitmq.port=5672
  14. spring.rabbitmq.username=admin
  15. spring.rabbitmq.password=admin
  16. management.security.enabled=false

启动项目

1.启动服务注册中心集群(springcloud-server-eureka)

2.启动服务配置中心(springcloud-server-config)

3.启动springcloud-service-config集群

启动后的服务注册图如下:

这里写图片描述

分别调用两个读取配置文件得集群:

这里写图片描述

这里写图片描述

去github仓库修改配置文件,并访问之前的集群服务,还没有立马生效

这里写图片描述

调用http://localhost:8001/bus/refresh 接口刷新配置中心服务

这里写图片描述

再次查看集群服务,如下图

这里写图片描述

这里写图片描述

源码

springcloud-server-eureka

springcloud-server-config

springcloud-service-config

历史文章

springcloud实战之1 技术选型:dubbo还是springcloud

springcloud实战之2 服务注册与发现(eureka实现)

springcloud实战之3 高可用服务注册中心(eureka集群)

springcloud实战之5 服务消费者(ribbon)

springcloud实战之6 服务消费者(Feign)

springcloud实战之7 断路器(Hystrix)

springcloud实战之8 断路器-仪表盘-单例监控(Hystrix)

springcloud实战之9断路器-集群监控(turbine)

springcloud实战之10 分布式配置中心(config)

springcloud实战之11路由网关(zuul)

springcloud实战之12 路由网关拦截器

springcloud实战之13 rabbitmq消息总线(bus)

发表评论

表情:
评论列表 (有 0 条评论,378人围观)

还没有评论,来说两句吧...

相关阅读