Spring Cloud Config 可以集中管理所有环境中应用程序的外部属性。支持热刷新,支持属性加解密。
一、服务端
1.1 服务搭建
- 在github、码云等网站创建一个项目;
- 本地创建项目,引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
- 配置文件application
spring:
cloud:
config:
server:
encrypt:
enabled: false # 是否开启解密,默认true开启,关闭后在服务端不解密,可以在客户端解密
git:
uri: https://gitee.com/xxx/spring-cloud-config.git # gitee仓库路径
username: xxx # gitee用户名
password: xxx! # gitee密码
search-paths:
- spring-cloud-config # 从哪些目录下搜索配置文件
skip-ssl-validation: false # 是否跳过配置服务器对 Git 服务器的 SSL 证书的验证,默认false
timeout: 120 # HTTP 连接的超时时间(以秒为单位)
force-pull: true # 强制克隆远程 git 存储库到本地,以防本地副本变脏
delete-untracked-branches: true # 从本地存储库中强制删除未跟踪的分支,即如果远程分支已删除,则删除本地分支
refresh-rate: 600 # 配置刷新频率,单位秒
basedir: D:\java\codes\spring-cloud-config # 一些操作系统会定期清理临时目录,将Config Server 使用的目录更改为不在系统临时结构中的目录
clone-on-start: true # 服务启动时克隆到本地
default-label: main # 分支
# 秘钥
encrypt:
key: mykey
key-store:
location: classpath:server.jks # 秘钥库位置
password: letmein # 解密秘钥库的密码
alias: mytestkey # 别名
secret: changeme # 生成秘钥库的密码
type: jks # 要创建的 KeyStore 的类型。默认为jks.
可使用的占位符:{application},{profile},{label}
- 开启配置中心,在启动类加上注解
@EnableConfigServer
1.2 加解密
- 生成key-store(.jks文件)
keytool -genkeypair -alias mytestkey -keyalg RSA \
-dname "CN=Web 服务器,OU=Unit,O=Organization,L=City,S=State,C=US"\
-keypass changeme -keystore server.jks -storepass letmein
- 把.jks文件放到某个位置,如resource下面
- 添加配置
如果在服务端解密,配置写在 application.yml
如果在客户端解密,配置写在 bootstrap.yml
# 秘钥
encrypt:
key: mykey
key-store:
location: classpath:server.jks # 秘钥库位置
password: letmein # 解密秘钥库的密码
alias: mytestkey # 别名
secret: changeme # 生成秘钥库的密码
type: jks # 要创建的 KeyStore 的类型。默认为jks.
- 数据加密
发送请求,获取加密后的数据
curl localhost:8888/encrypt -s -d mysecret
其中-d后面是要加密的数据
解密:
curl localhost:8888/decrypt -s -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
- 放入配置中心
在加密数据之前拼接上 {cipher},如:
spring:
datasource:
username: dbuser
password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'
二、客户端
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 在bootstrap.yml配置文件配置
spring:
cloud:
config:
# 找到分支为main的配置文件config-dev.yml
label: main # 分支
name: config # 配置文件名称
profile: dev # 环境
uri: http://localhost:3344 # 配置中心地址
fail-fast: true # 开启快速失败,如果无法连接配置服务器,就服务启动失败,。默认FALSE
request-read-timeout: 2000
request-connect-timeout: 2000
# 重试
retry:
initial-interval: 1000 # 初始间隔,默认1000ms
max-attempts: 6 # 最大重试次数,默认6
max-interval: 2000 # 最大间隔,单位ms
multiplier: 1.1 # 乘数,默认1.1
# 秘钥
encrypt:
key: mykey
key-store:
location: classpath:server.jks # 秘钥库位置
password: letmein # 解密秘钥库的密码
alias: mytestkey # 别名
secret: changeme # 生成秘钥库的密码
type: jks # 要创建的 KeyStore 的类型。默认为jks.
三、手动动态刷新
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 在bootstrap.yml配置文件配置
# 暴露监控端口
management:
endpoints:
web:
exposure:
include: "*"
- 在配置类等用到了配置文件的类上加上动态刷新注解:
@RefreshScope
- 通过curl刷新服务(必须是post请求):
curl -X POST http://localhost:8001/actuator/refresh