Version: Next
配置客户端搭建
目前,已经搭建好了 配置中心服务端
Config Server
- 可以通过
Config Server
读取远程 Git 仓库上的配置文件- 现在要做的:构建 Config Client,与 Config Server 互联,读取配置信息
cloud-config-client-3355
POM
- 核心依赖:
starter-config
注意:配置中心服务端的依赖为config-server
,客户端是starter-config
<!--config client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config</artifactId>
</dependency>
完整依赖
<dependencies>
<!--config server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!--eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><!-- 引用自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>org.example</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
bootstrap.yml
为什么不用 application.yaml
application.yml
是用户级资源配置项bootstrap.yml
是系统级,优先级更高- Spring Cloud 会创建一个
Bootstrap Context
,作为 Spring 应用的Application Context
的父上下文
- 初始化时,
Bootstrap Context
负责从外部源加载配置属性并配置解析- 两个上下文共享一个从外部获取的
Environment
Bootstrap
属性具有高优先级,默认情况下,他们不会被本地配置覆盖
Bootstrap Context
和Application Context
有着不同的约定- 新增
bootstrap.yml
保证Bootstrap Context
与Application Context
配置分离- 将 Config Client 模块的 application.yml 更换为 bootstrap.yml 是很关键的
- 因为
boostrap.yml
比application.yml
先加载,优先级更高
- 此处,Config Client 不会跑到远程 Git 仓库读取配置
- 只会去本地配置中心 Config Server 读取配置信息
bootstrap.yml
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://localhost:3344 # spring cloud config server uri
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
主启动类
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3355.class, args);
}
}
业务类
配置中心客户端,应当以
REST
的形式对外暴露配置项目
- 在
Config Client
编写 Controller ,对外暴露接口- 从而读取配置中心
Config Server
上的配置信息
ConfigClientController
- 注意:
@Value
修饰 Controller 的成员属性:此处注解中的内容,必须对应远程 Git 仓库上的 yml 配置文件中的属性,例如此处yml
文件中有个config.info
属性配置客户端 Controller 从配置中心 Config Server 读取配置@RestControllerpublic class ConfigClientController {@Value("${config.info}") // 与远程 git 仓库上 yml 文件中的属性一致,就读取这个配置属性private String configInfo;@GetMapping("/configInfo")public String getConfigInfo() {return configInfo;}}
测试
- 启动
7001
- 启动
3344
配置中心服务端- 启动
3355
配置客户端3344
自测:访问http://config-3344.com:3344/master/config-dev.yaml
3355
通过配置中心获取远程 Git 仓库配置信息:访问:http://localhost:3355/configInfo
- 这样就实现了 配置客户端3355 访问 配置中心服务端 3344,从远程 Git 仓库读取配置信息
配置动态刷新问题
- 在
Github
远程仓库修改配置内容- 刷新
配置中心 Config Server 3344
发现配置中心 立刻更新了配置- 刷新
配置客户端 Config Client 3355
发现配置客户端 没有任何更新
3355
只有 重启、重新加载 才能更新配置