SpringCloud-Config
Spring Cloud Config 是 Spring Cloud 团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持, 它分为服务端与客户端两个部分。服务端称为分布式配置中心, 它是一个独立的微服务应用, 用来连接配置仓库并为客户端提供获取配置信息、 加密/解密信息等访问接口;客户端微服务架构中的各个微服务应用或基础设施, 它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
Spring Cloud Config 实现了对服务端和客户端中环境变量和属性配置的抽象映射, 所以它除了适用于 Spring 构建的应用程序之外,也可以在任何其他语言运行的应用程序中使用。 由于 Spring Cloud Config 实现的配置中心默认采用 Git 来存储配置信息, 所以使用 Spring Cloud Config 构建的配置服务器,天然就支持对微服务应用配置信息的版本管理, 并且可以通过 Git 客户端工具来方便地管理和访问配置内容。 当然它也提供了对其他存储方式的支持, 比如 SVN 仓库、 本地化文件系统。
入门案例
- pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- appliaction.properties
server.port = 8080
# 连接远程git读取配置信息 必须是你本地的一个git仓库 git init创建一个git的本地仓库
spring.cloud.config.server.git.uri = file:///D:/config
management.endpoints.web.exposure.include=*
- 入口类
@SpringBootApplication
@EnableConfigServer
public class SpringBootConfigServer {
public static void main(String[] args) {
SpringApplication.run(SpringBootConfigServer.class,args);
}
}
- 在本地系统D盘创建git配置文件,这种方式一般用于本地测试,正常情况下需要将配置文件上传到git远程仓库。
Administrator@PC-201610211330 MINGW64 /d/config (master)
$ ls -l
total 3
-rw-r--r-- 1 Administrator 197121 15 五月 31 10:01 SpringCloudConfigServer.properties
-rw-r--r-- 1 Administrator 197121 24 五月 31 10:02 SpringCloudConfigServer-dev.properties
-rw-r--r-- 1 Administrator 197121 20 五月 31 10:02 SpringCloudConfigServer-test.properties
其中:
//注意你这个SpringCloudConfigServer 起的名字必须是你当前的应用名
SpringCloudConfigServer.properties
server.port=6060
SpringCloudConfigServer-dev.properties
server.port=8080
SpringCloudConfigServer-test.properties
server.port=7070
- SpringCloud的configServer会启动一个web服务,用于提供配置信息给其他机器。一般提供的访问格式如下
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中application表示应用名字,profile表示运行的环境参数、label可以理解为git分支选配,默认值是master
访问地址:http://localhost:8080/SpringCloudConfigServer/test/master
配置之后上传到远程github的仓库 然后你访问的时候从远程服务器去拿资源
配置客户端
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- ConfigClientApplication
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class,args);
}
}
- application.properties
server.servlet.context-path= /SpringCloudConfigClient
- bootstrap.properties
这里必须叫做这个名字
# 指定连接的配置服务名字
#这里要和下面保持一致 这样下面就不用写了
spring.application.name=SpringCloudConfigServer
spring.cloud.config.profile=test
spring.cloud.config.label=master
#spring.cloud.config.name= SpringCloudConfigServer
spring.cloud.config.uri=http://localhost:8080
# 开启所有的健康检查
management.endpoints.web.exposure.include=*
这个时候你去启动他就会自动的读取你俩个配置文件的组合内容
多仓库配置
server.port = 8080
# 连接远程git读取配置信息
spring.cloud.config.server.git.uri = https://github.com/zax/applicationconfig.git
spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.server.git.refresh-rate=5
spring.cloud.config.server.git.repos.aa.search-paths=app1
spring.cloud.config.server.git.repos.aa.clone-on-start=true
spring.cloud.config.server.git.repos.aa.pattern=app*
spring.cloud.config.server.git.repos.aa.uri=https://github.com/jiangzz/applicationconfig.git
spring.cloud.config.server.git.repos.aa.refresh-rate=5
management.endpoints.web.exposure.include=*
客户端刷新RefreshScope
默认的情况下 你的client服务只会在启动的时候加载一次,如果你在启动的时候修改了配置服务器,你的client这个时候还是以前的,要想做到动态更新 在你的控制器上加一个@RefreshScope这个时候创建的是一个当前控制器的代理对象,在代理的类中允许去刷新属性值。
@RefreshScope
@RestController
public class TestController {
@Value("${server.port}")
private int port;
@RequestMapping
public int test(){
return port;
}
}
执行以下shell
bin>curl.exe -X POST http://localhost:7070/SpringCloudConfigClient/actuator/refresh
执行这个刷新才会有新的结果
配置服务器和Eureka集成
在原有的pom文件中添加eureka
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在application.properties添加Eureka依赖
spring.application.name=CONFIG-SERVICE
eureka.instance.instance-id=001
eureka.instance.prefer-ip-address=true
eureka.instance.lease-expiration-duration-in-seconds=20
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.client.register-with-eureka=true
eureka.client.healthcheck.enabled=true
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://CentOSA:1111/eureka/,http://CentOSB:1111/eureka/,http://CentOSC:1111/eureka/
配置客户端和Eureka集成
在原有的pom文件中添加eureka
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在bootstrap.properties添加Eureka依赖
# 指定连接的配置服务名字
spring.application.name=app1
spring.cloud.config.profile=test
spring.cloud.config.label=master
spring.cloud.config.name= SpringCloudConfigServer
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=CONFIG-SERVICE
# 开启所有的健康检查
management.endpoints.web.exposure.include=*
## 配置Eureka
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=false
eureka.client.service-url.defaultZone=http://CentOSA:1111/eureka/,http://CentOSB:1111/eureka/,http://CentOSC:1111/eureka/