Spring-Cloud-Config 提供在分布式系统中客户端与服务端的外部配置支持。在Config Server端 你可以有一个集中的地方存放与管理其他所有服务的外部配置。
其依赖为 spring-cloud-starter-config,服务端依赖为 spring-cloud-config-server. 客户端依赖为 spring-cloud-config-client.
1、应用程序配置文件的命名约定{application}-{profile}.yml。
2、config-server本身也是一个微服务,在它的启动类上使用注解@EnableConfigServer。
3、在微服务(配置服务端)的配置文件(bootstrap)中的关键配置:
每次更改完记得重启服务器
spring:
profiles:
active: native #表明使用本地文件系统
cloud:
config:
server:
native:
searchLocations: file:///${user.home}/config-repo #配置所在文件夹列表。注意如果是绝对路径需要使用file:前缀(如果不写默认为classpath),路径中可以使用${}占位符,如果是Windows系统注意最前面是"///" ,多个路径使用逗号分割 ,本地测试可以直接是,例如E:/aaa/bb
注意searchLocations的斜杠方向 在searchLocations中可以使用{application}, {profile}和{label}标签。以便结构化配制文件目录。默认会在路径中最后添加{label}。可以禁用spring.cloud.config.server.native.addLabelLocations=false
4、在微服务(配置客户端)的配置文件(bootstrap)中的关键配置:
spring:
application:
name: # 就是{application}
profiles:
active: default
cloud:
config:
uri: # server端ip地址及端口 http://127.0.0.1:8888
也就是说通过URI,找到配置服务端所在的地址。配置服务端选在本地文件方式,在searchLocations指定的 文件夹 下存放配置,可以有多个文件夹。然后通过客户端配置文件中 name 和 profile 属性值 去匹配相应的 文件夹下的 {application}-{profile}.yml文件。更多映射规则可以参考官方文档
加密属性
需要下载JCE,需要手动下载。
替换$JAVA_HOME/jre/lib/security目录中的local_policy.jar和US_export_policy.jar
注意JCE的版本要和jdk版本一致,否则会报错
设置密钥
将环境变量 ENCRYPT_KEY设置为 export ENCRYPT_KEY=密钥
或者
在服务端配置文件中 encrypt.key=密钥
对称加密
加密明文: curl $CONFIG_SERVER_URL/encrypt -d 明文 或者 对该端点直接进行POST请求,报文内容是明文。小心不要有不需要的空格等
解密密文: curl $CONFIG_SERVER_URL/decrypt -d 密文 或者 对该端点直接进行POST请求,报文内容是密文。小心不要有不需要的空格等
如果使用windows系统,可以使用postman发送post请求 $CONFIG_SERVER_URL/encrypt。报文是需要加密的内容。解密反之
加密后的内容可使用 {cipher}密文 的形式储存。
例如yml文件中:password: '{cipher}dg43iodw34qggi5443oap54dsfi4pw2376' 注意必须有单引号,而properties文件不能有单引号
默认情况下在服务器进行解密,将明文传回请求程序。
可以访问$CONFIG_SERVER_URL\xxx.yml,查看具体配置文件的解密情况,防止由于多了空格或者回车,而导致加解密错误。
要在客户端进行解密:
在config server的配置文件中设置:
spring.cloud.config.server.encrypt.enabled=false
确保客户端的ENCRYPT_KEY环境变量与Server的环境变量(即使用的密钥)相同。
在客户端的依赖项中添加 spring-security-rsa.