1 配置刷新
远程Git上面的配置修改后,客户端可以通过一些方式来更新配置。访问客户端的/refresh端点进行配置刷新,访问端点要使用HTTP,POST方法。具体操作如下:
在上篇文章中Config-client项目pom增加如下配置文件(config-server不做修改):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
在client需要更新变量的对应的controller加入注解@RefreshScope:
@RestController
@RefreshScope
public class TestController {
@Autowired
Environment env;
@RequestMapping("/feng")
public String sang() {
return env.getProperty("feng", "未定义");
}
}
我们将Git上的配置改为dev config 2,然后使用postman POST方式访问http://localhost:2008/refresh/,配置会自动更新。
另外client配置文件中要关闭安全管理:
management:
security:
enabled: false
2 准备工作
同样,Git配置文件使用明文存储是不安全的,spring cloud config 提供了配置文件的加解密。
默认情况下我们的JRE中自带了JCE(Java Cryptography Extension),但是默认是一个有限长度的版本,我们这里需要一个不限长度的JCE,这个JCE我们可以直接百度然后在Oracle官网下载,下载之后解压,我们可以看到如下三个文件:
将这里的两个jar包拷贝到我们的jdk安装目录下,我的是%JAVA_HOME%\jre\lib\security,覆盖该目录下原有的文件。
3 配置对称加解密
spring cloud config 提供配置加密和解密的功能。对称加密是指发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算,所以需要在config-server项目配置文件application中增加配置秘钥:
3.1 加密
encrypt:
key: myKey
配置完之后,首先来测试加密的功能,可以通过访问/encrypt来进行加密,下面使用postman进行测试。
3.2 解密
通过访问/decrypt端点进行解密,下面使用postman进行测试。
将Git配置文件改为加密方式,如果config client想要获取到解密后的字符串,只需要将配置文件前增加{cipher}即可
4 配置非对称加解密
对称加密算法在加密和解密时都使用同一个密钥,但非对称加密则使用一对密钥。使用公钥加密,解密使用私钥解密。spring cloud config 同样支持非对称加密。
可以使用JDK提供的工具keytool生成密钥对,执行成功之后,会在命令执行目录下生成一个名为.keystore的文件,将生成的文件复制到config server项目的classpath下,修改application.yml文件,加入如下配置:
encrypt:
keyStore:
location: classpath:/myTest.keyStore
password: ***
alias: ***
secret: ***
设置好后,同样可以使用/encrypt来进行加密,使用/decrypt来进行解密。在Git的配置文件中使用{cipher}密文的格式,config client访问时会自动解密。
5 其他配置
- 服务器健康指示器:在config server访问Git配置文件仓库时,如果连不上,那么config server的健康状态将会设置为DOWN,除了会检测Git仓储是否可以访问外,还可以进行额外配置,检测Git的某个目录或文件是否可以访问。‘
- 客户端的错误提取与重试机制:默认情况下,config client在启动时,如果config server连接不上时仍然可以启动。也可以通过配置在config client启动时,无法连接config server,则终止client的启动。
- 安全配置:可以给config server配置密码,在client连接时需要密码。
参考
- 杨恩雄 《疯狂spring cloud微服务架构实战》