工作中遇到应用配置管理的问题,在实际部署时应用会多节点部署,将配置统一到配置中心后,可以方便配置的管理,做到配置的一处修改即可。避免了登陆到部署的各个节点进行逐个修改。同时配置中心支持多命名空间,可以将公用的redis配置、mysql配置放到单独的命名空间,需要使用的模块引用对应的命名空间即可。
为了减少配置的引用,以及同时支持不接入配置中心的情况,笔者使用了稍微高一点的客户端版本。
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.4.0</version>
</dependency>
从而在spring boot的应用中,直接在application.properties中直接配置是否启用配置中心即可。
#是否启用配置中心
apollo.bootstrap.enabled = true
app.id=test_app
apollo.meta=http://172.16.6.11:8080/
apollo.bootstrap.eagerLoad.enabled=true
#多命名空间应,这里直接引用了redis的配置
apollo.bootstrap.namespaces = application,TEST1.common-redis
配置中会存在密码的信息,如果直接在配置中心明文配置,会存在密码泄露的风险,可以集成
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.18</version>
</dependency>
在配置配置中心以ENC(加密后的密文)作为值。
public static void main(String[] args) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的加密密钥
textEncryptor.setPassword("PwdPwd");
//要加密的数据(数据库的用户名或密码)
String encpwd = textEncryptor.encrypt("dbPwd");
System.out.println("username:"+encpwd);
}
加密使用的密钥,可以配置在application.properties里面,如下
jasypt.encryptor.password=pwdpwd