1、新建cloud-config-client-3355

2、POM

config中没有带server

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-config</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-web</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-actuator</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-devtools</artifactId>
  21. <scope>runtime</scope>
  22. <optional>true</optional>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.projectlombok</groupId>
  26. <artifactId>lombok</artifactId>
  27. <optional>true</optional>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. </dependency>
  34. </dependencies>

3、bootstrap.yml

applicaiton.yml是用户级的资源配置项

bootstrap.yml是系统级的,优先级更加高

Spring Cloud会创建一个Bootstrap Context,作为Spring应用的Application Context的父上下文。

初始化的时候,BootstrapContext负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment。

Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。Bootstrap context和Application Context有着不同的约定,所以新增了一个bootstrap.yml文件,保证Bootstrap Context和Application Context配置的分离。

要将Client模块下的application.yml文件改为bootstrap.yml,这是很关键的,因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml。

  1. server:
  2. port: 3355
  3. spring:
  4. application:
  5. name: config-client
  6. cloud:
  7. #Config客户端配置
  8. config:
  9. label: master #分支名称
  10. name: config #配置文件名称
  11. profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
  12. uri: http://localhost:3344 #配置中心地址k
  13. #服务注册到eureka地址
  14. eureka:
  15. client:
  16. service-url:
  17. defaultZone: http://localhost:7001/eureka
  18. # 暴露监控端点
  19. management:
  20. endpoints:
  21. web:
  22. exposure:
  23. include: "*"

image.png

4、修改config-dev.yml配置并提交到gitHub,比如加个变量age或者版本号version

5、主启动

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

6、业务类

  1. @RestController
  2. @RefreshScope
  3. public class ConfigClientController {
  4. @Value("${config.info}")
  5. private String configInfo;
  6. @GetMapping("/configInfo")
  7. public String getConfigInfo(){
  8. return configInfo;
  9. }
  10. }

7、测试

首先启动7001
然后再启动3344
启动3355
image.png
image.png
image.png
image.png
会发现3355读取的内容和3344是一样的。

8、成功实现了客户端3355访问springcloud Config3344通过GitHub获取信息配置

9、问题随之而来,分布式配置的动态刷新问题

image.png
把master改成dev,它读取的就是localhost3344上面的dev分支

Linux运维修改GitHub上的配置文件内容做调整
image.png
刷新3344,发现ConfigServer配置中心立刻响应
image.png
刷新3355,发现ConfigClient客户端没有任何响应
image.png
3355没有变化除非自己重启或者重新加载
image.png

1、Linux运维修改GitHub上的配置文件内容做跳转