分布式配置中心:Spring Cloud Config

30次阅读

共计 3398 个字符,预计需要花费 9 分钟才能阅读完成。

构建配置中心
创建一个基础 Spring Boot 工程,命名为 config-server,并在 pom.xml 中引入以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
在程序主类中添加 @EnableConfigServer 注解
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
在 application.properties 文件中添加配置服务的基本信息和 git 仓库的相关信息
spring.application.name=config-server
server.port=7001
#git 路径,精确到具体仓库位置
spring.cloud.config.server.git.uri=https://gitee.com/dongspace/config-file/
#git uri 下的相对搜索位置,可以配置多个,以 ”,” 分隔
spring.cloud.config.server.git.search-paths=config-client,demo
spring.cloud.config.server.git.username=***
spring.cloud.config.server.git.password=***
Git 配置仓库

新建一个仓库,命名为 config-file
新建两个文件夹,分别命名为 config-client 和 demo

在 config-client 下新建配置文件 application.properties、application-stg1.properties,并添加如下配置
from=master
#stg1 中的配置
from=master-stg1

在 demo 文件夹下新建 dongspace.properties、dongspace-stg1.properties,并添加如下配置
from=dong-master
#stg1 中的配置
from=dong-master-stg1

配置规则详解
配置信息的 URL 与配置文件的映射关系如下:

/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
/{application}/{profile}/[/{label}]

上面的 URL 对应 {application}-{profile}.properties,其中{application} 对应配置文件名,{label}对应代码分支,默认为 default 以上通过浏览器访问的路径对应为:

http://localhost:7001/application-stg1.properties

http://localhost:7001/master/application-stg1.properties

http://localhost:7001/application/default/master

客户端配置
创建一个基础 Spring Boot 工程,命名为 config-client,并在 pom.xml 中引入以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
在 bootstrap.properties 中加入以下配置:
server.port=7002
spring.application.name=config-client
spring.cloud.config.profile=stg1
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:7001/
创建一个测试类
@RestController
public class TestConfigController {

@Value(“${from}”)
private String from;

@RequestMapping(“/testConfig”)
public Object testConfig() {
return from;
}
}
服务端的占位符配置
实现多个服务对应一个仓库中的不同目录
spring.cloud.config.server.git.uri=https://gitee.com/dongspace/config-file/
#{application}对应访问服务的应用名
spring.cloud.config.server.git.search-paths={application}
实现一个服务对应目录下的一个仓库
spring.cloud.config.server.git.uri=https://gitee.com/dongspace/{application}-conf
基础架构

客户端应用从 config-server 中获取配置信息遵从下面的执行流程:

应用启动时,根据 bootstrap.properties 中配置的{application}、{profile}、{label},向 Config Server 请求获取配置信息。
Config Server 根据自己维护的 Git 仓库信息和客户端传递过来的配置定位信息去查找配置信息。
通过 git clone 命令将找到的配置信息下载到 Config Server 的文件系统中。
Config Server 创建 Spring 的 ApplicationContext 实例,并从 Git 本地仓库中加载配置文件,返回给客户端使用。
客户端应用获得外部配置信息后,加载到客户端的 ApplicationContext 实例。该配置内容的优先级高于 Jar 包内部的配置内容,在 jar 包中重复的内容将不会被加载。

健康监测
当使用占位符配置 URI 时,Config Server 会默认加载 application 为 app 的仓库,根据之前的配置规则,服务端的健康检测器会不断检查 https://gitee.com/dongspace/a… 仓库是否可以连通,这时访问配置中心的 /health 端点时返回的服务状态为 ”DOWN”,当服务化配置中心时,将影响它的可用性判断,此时有两种解决方案:1. 创建名为 app-config 的仓库;2. 改变健康监测的配置如下
spring.cloud.config.server.health.repositories.check.name=app2
spring.cloud.config.server.health.repositories.check.label=master
spring.cloud.config.server.health.repositories.check.profiles=default
其他配置
安全保护
首先在服务端 pom.xml 中添加 Spring Security 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
出现的问题
初始提交码云时报 push to origin/master was rejected 错误
解决方案如下:
1. 切换到自己项目所在的目录,右键选择 GIT BASH Here,Idea 中可使用 Alt+F12
2. 在 terminl 窗口中依次输入命令:
git pull
git pull origin master
git pull origin master –allow-unrelated-histories
3. 在 idea 中重新 push 自己的项目,成功!!!

正文完
 0