Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save wutingjia/24b01889b5a97527f2f7127d6c0bc8e2 to your computer and use it in GitHub Desktop.
Save wutingjia/24b01889b5a97527f2f7127d6c0bc8e2 to your computer and use it in GitHub Desktop.
Spring-Cloud-Config(本地文件系统配置)

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment