config是Spring Cloud中的配置中心,在正式场景中,存在修改配置的情况,每次配置的修改都要进行重新打包,这是非常麻烦的一件事,可能还伴随着其他问题的引发。而config就可以将一些与启动无关的配置进行动态修改,并生效。以前要数据库进行配置的,现在也可以在config中完成。
快速入门
Config服务端
1 | <dependency> |
bootstrap.yml
1 | # Spring properties |
Main.java
1 |
|
Config客户端
pom配置是与服务端是一样的
1 | spring: |
main.java
1 |
|
深入学习
刷新配置
git配置目录下的文件发生更改时,需要更新通知到服务,使用@RefreshScope可以帮助实现配置的刷新。
实现方式:
在指定的配置类下使用@RefreshScope,如若git配置发生变化,使用http://相应服务地址/refresh ,(POST)。
也可以:
重启服务在application.yml中启用endpoints.restart.enabled=true
,调用http://相应服务地址/restart ,(POST)服务。
注-往往存在一些场景,refresh是不会生效的,因而,使用restart时比较保险的操作,但restart耗时比较长。故建议,在没有特殊的处理的配置类中使用@RefreshScope来实现refresh,存在比较复杂,且要求比较高的配置项,还是使用restart比较靠谱。
模式的匹配
1 | spring: |
当不存在pattern时,{application}/{profile}则根据key来决定,例如simple中,匹配的是simple/*
,如local中,匹配的是local*/*
本地存储路径控制:
在使用的config服务的时候,其会clone一份缓存到本地,如果你要指定路径可以使用spring.cloud.config.server.git.basedir
使用本地加载配置文件:
需要配置:spring.cloud.config.server.native.searchLocations
跟spring.profiles.active=native
。
路径配置格式:classpath:/, classpath:/config,file:./, file:./config
。
基于文件的资源库:
在基于文件的资源库中(i.e. git, svn and native),这样的文件名application*
命名的资源在所有的客户端都是共享的(如 application.properties, application.yml, application-*.properties,etc.)。
加密与解密
如果远程属性包含加密内容(以{cipher}开头),这些值将在通过HTTP传递到客户端之前被解密。
实现方式下载解压JCE,并复制至JDK/jre/lib/security
文件夹下,Maven依赖”org.springframework.security:spring-security-rsa
”。
环境配置
config相关配置需要在bootstrap.yml中进行配置,在实际开发中存在调试环境,开发环境,测试环境,线上环境等场景,因而,对bootstrap.yml进行配置环境化配置是很必须的。
可以bootstrap-[environment].yml,默认是会读取bootstrap.yml和bootstrap-default.yml中的配置。若需要读取其他环境的配置,可在bootstrap.yml中设置
1 | #spring环境和config中的配置都会使用该环境的配置 |
只是想更改config中的环境:
1 | spring: |
Tips
如果config的客户端需要使用service-id这种负载均衡的方式获取config服务端的配置信息,需要注意将注册中心的信息和config服务的信息都写于bootstrap.yml下,
否则可能存在找不到config服务。