服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
新建cloud-config-client-3355客户端
依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020artifactId>
<groupId>pers.zhang.springcloudgroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>cloud-config-client-3355artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
project>
配置:bootstrap.yml
server:
port: 3355
spring:
application:
name: config-client
cloud:
config: #Config客户端配置
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀
uri: http://localhost:3344 #配置中心地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
Controller
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
启动类:
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3355.class, args);
}
}
测试:
启动eureka,3344服务端,3355客户端:
访问:localhost:3355/configInfo
,成功读取到配置信息
此时,修改config-dev.yml的version=2:
访问3344配置中心:http://localhost:3344/master/config-dev.yml
,立即加载到最新的版本
访问3355客户端:http://localhost:3355/configInfo
,还是老版本:
3355客户端没有变化,除非自己重启或者重新加载。
重启后加载到最新的:
修改3355模块,引入actuator图形监控:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
暴露监控端点,在bootstrap.yml中增加如下配置:
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
在Controller上添加@RefreshScope
注解:
测试:
启动eureka,3344服务端,3355客户端,修改version=3
访问:http://localhost:3344/master/config-dev.yml
访问:http://localhost:3355/configInfo
为什么会失败?因为@RefreshScope
注解需要使用一个POST请求刷新3355,才可以加载到最新数据:
再次访问:成功获取最新配置