Config Server
依赖:
1 |
|
1 |
|
http://localhost:8888
仓库配置
三种占位符:
- {application},应用名称,默认application
- {profile},环境,默认default
- {label},分支,默认master
URL路径和配置文件的映射关系:
/{application}/{profile}[/{label}]
[/{label}]/{application}-{profile}.yml
[/{label}]/{application}-{profile}.properties
例如:
http://192.168.70.139:9999/cts-hello-client/default
http://192.168.70.139:9999/cts-hello-client-default.properties
1 |
|
多仓库
1 |
|
默认会从仓库checkout一份到本地/tmp/config-repo-随机数
目录,可以通过参数定制此目录:
1 |
|
仓库认证
用户需要Reporter或以上角色
http
1 |
|
ssh
基于{user.home}/.ssh/密钥访问
1 |
|
默认属性
安全保护
config server:
1 |
|
1 |
|
config client:
1 |
|
或者
1 |
|
加密
需要安装Unlimited Strength Java Cryptography Extension
特有端点:
/encrypt/status
/key
/encrypt
/decrypt
对称加密
- 配置对称密钥
在配置中心的bootstrap.properties中配置如下:
1 |
|
- 查看服务状态
访问:http://localhost:9999/encrypt/status
- 加密
1 |
|
- 配置
1 |
|
- 解密
1 |
|
非对称加密
- 配置非对称密钥
生产密钥库(利用JDK自带的keytool工具),然后配置如下:
1 |
|
其他跟对称密钥类同
高可用
Config Client
依赖:
1 |
|
bootstrap.properties/yml
1 |
|
其他配置从config server获取
应用属性文件
{application}-{profile}.properties/yml
{application}.properties/yml(default profile)
通过spring.cloud.config.profile=dev
设定profile
所有应用共享属性
方法一
仓库根目录下的application[-profile].properties/yaml定义所有应用的共享属性,比应用级属性优先级低。
本地文件系统模式下,建议显示指定路径,与config server自己的配置(application[-profile].properties/yaml)区分开,因为config server自己的配置不会传递给config client
方法二
config server支持属性覆盖特性,config server中定义覆盖属性,所有config client可以读取到。
config server的application.properties
1 |
|
方法二比方法一优先级高
本地属性覆盖
命令行参数优先级更高,会覆盖从config server获取的属性。另外也可以通过配置实现本地配置覆盖远程配置,参考如下:
以下三个属性在remote properties中设置才有效(在local properties设置无效)
是否允许remote properties被本地覆盖,默认值true
spring.cloud.config.allowOverride=true
远程配置是否不覆盖本地配置,即本地配置优先级是否高于远程配置,默认值false
spring.cloud.config.overrideNone=false
远程配置是否覆盖系统属性,即远程配置优先级是否高于系统属性
spring.cloud.config.overrideSystemProperties=true
动态刷新
- 添加依赖
spring-boot-starter-actuator
,带有/refresh
端点
1 |
|
-
添加@RefreshScope
1
2
3
4
5
6
7
8
9
10
11
12@RefreshScope @RestController public class TestController { @Value("${from}") private String from; @RequestMapping("/from") public String from() { return from; } }
-
修改配置后,POST提交请求到客户端
/refresh
,即可刷新配置。例如:1
2$ curl -d '' http://localhost:7002/refresh ["config.client.version","from"]
上述方式是针对单个微服务实例的刷新,如果要同时属性所有微服务实例,可以借助Spring Cloud Bus实现,详情可以参见实践Spring Cloud之Bus
Config First Bootstrap
默认是基于Config Server优先,Config Client先从Config Server读取配置,然后进行注册微服务等其他初始化动作,因而经需要配置bootstrap.properties如下:
1 |
|
Discovery Frist Bootstrap
基于Eureka Server优先,Config Server注册到Eureka Server中,Config Client通过Eureka Server查找调用Config Server,因而bootstrap.properties中需要配置如下:
1 |
|
spring-cloud-config-admin
Q&A
- 当启动时无法连接上config server,报错如下:
1 |
|
-
当开启连接不上config server时快速失败(
spring.cloud.config.fail-fast=true
),报错如下:1
2
3
42017-12-29 10:12:24.447 ERROR 5960 --- [ main] o.s.boot.SpringApplication : Application startup failed java.lang.IllegalStateException: No instances found of configserver (config-center1) at org.springframework.cloud.config.client.ConfigServerInstanceProvider.getConfigServerInstance(ConfigServerInstanceProvider.java:25) ~[spring-cloud-config-client-1.3.3.RELEASE.jar:1.3.3.RELEASE]
-