1. 关于管理配置
- ##配置管理架构
- ##实施选择
我们选择使用Spring Cloud configuration server,理由如下:
a. 易于设置和使用
b. 与Spring Boot集成方便
c.提供多种后端存储配置数据
d.可直接和git集成
2. 创建Spring Cloud configuration server
上图展示了Spring Cloud configuration通过HTTP端点来暴露配置文件的。
2.1 创建启动类
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
2.2 使用git存储配置文件
Spring Cloud configuration的application.yml文件:
spring:
application:
name: configserver
cloud:
config:
server:
git:
uri: https://github.com/jiangjj/spring-cloud
search-paths: config-files
server:
port: 8888
search-paths表示搜索配置文件所在的目录,其父目录为git的uri,所以此配置中的配置文件将保存在https://github.com/jiangjj/spring-cloud/config-files 目录下。
启动服务端后,可以通过浏览http://localhost:8888/licensingservice/default 查看licensingservice.yml配置文件的信息。
3.将Spring Cloud Config与Spring Boot客户端集成
上图展示了客户端通过配置管理中心获取配置信息的过程。
3.1 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3.2 配置客户端去使用Spring Cloud Config
客户端的bootstrap.yml文件:
spring:
application:
name: licensingservice
cloud:
config:
uri: http://config-server:8888
3.3 更新配置文件
服务端与客户端都需要添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
启动一个rabbitMQ,服务端和客户端都连接到mq上,配置文件修改后,需要发送一个POST请求到服务端的/monitor断点上,body为path={name}的form-encoded。
3.4 保护敏感信息
需要先安装Oracle JCE jars,自行百度。 在服务端添加系统环境变量ENCRYPT_KEY或在配置文件bootstrap.yml中添加:
encrypt:
key: myEncryptKey
敏感信息通过服务端的/encrypt端点加密,然后以{cipher}开头添加到配置文件中:
my:
message: myMessage4
encryptMessage: '{cipher}a605a2097c68da8a4925b7bf8a04b3c6ab850713b1a2a0c8a4a331b557cbd9f8'