SpringCloud Config有关客户端映射的总结
这次是客户端
1、 简单了解,从控制台开始
从日志可见以下默认配置
1、 默认请求的配置中心是本机域名的8888端口,由于是本地启动所以是localhost
2、 当8888端口不可用时,将会尝试下一个url(高可用)
3、 默认请求:http://localhost:8888/application/default
4、 再本地也无法找到该域名下的属性文件(可能是缓存过,但是网络断开了),name抛出java.net.ConnectException: Connection refused:connect异常
5、 使用default配置文件
6、 如果配置了快速失败,将直接抛出异常,否则直接捕获但是只返回null
在包org.springframework.cloud.config.client下的ConfigServicePropertySourceLocator
负责加载
2、 从配置来看
1、 bootstrap.properties优先级比application.properties还要高,只有使用这个才能实现配置中心获取配置
2、 spring.application.name=springcloudconfigclientdemo,就是配置文件application-{profile}中的application,这点在总结1中写到过
2、@RefreshScope作用的类,不能是final类,否则启动时会报错
如图:
从出错信息上看,底层应该是使用cglib进行增强,需要在TestUtil下派生子类
从网上看还有一个坑:
org.springframework.web.cors.CorsConfiguration配置类,加了@RefreshScope后,org.springframework.web.filter.GenericFilterBean#init这个核心bean的init就会报错,要么应用启不起来,要么请求时报内部错误。
使用JMX,这个不会,就不说了。。。
3、 查看源码
1、在spring-configuration-metadata.json中配置了默认请求服务端URL,且使用HTTP连接
同时还有配置默认的快速失败为false,默认分支master等等主要配置均在此文件中
3、 在同文件夹的spring.factories中定义了自动配置所需要引入的类,【同样适用springboot其他组件】
该文件内容如下:
# Auto Configure
|
此时可以看到BootstrapConfiguration是加载客户端和服务端的bootstrap配置的类(接口)
此接口同包下有一个监听器
BootstrapApplicationListener,
实现了ApplicationListener<ApplicationEnvironmentPreparedEvent>,Ordered
其中Ordered是一个接口,定义了
public interface Ordered { int HIGHEST_PRECEDENCE = -2147483648; int LOWEST_PRECEDENCE = 2147483647; int getOrder(); }
|
可见在这个类中定义了bootstrap加载的优先级是最高的
包 org.springframework.cloud.bootstrap;
默认就是bootstrap.properties,且默认是开启bootstrap.properties这个功能
有关配置
${spring.cloud.bootstrap.name:bootstrap}
${spring.cloud.bootstrap.location:}
有个疑问就是日志:
2018-07-12 09:02:41.698 INFO 13952 --- [ main]c.n.s.ClientApplication : No active profile set, falling back to default profiles: default
是在本client应用中打印的,但是我这个配置了属性,Controller测试也能获取属性值,改成dev test prod也都正常,不清楚这个日志是怎样的,好像是代理输出的
PS:
spring:
cloud:
config:
allowOverride:true 是否允许用户配置
overrideNone:true
overrideSystemProperties:false
overrideNone:当allowOverride为true时,overrideNone设置为true,外部的配置优先级更低,而且不能覆盖任何存在的属性源。默认为false
allowOverride:标识overrideSystemProperties属性是否启用。默认为true,设置为false意为禁止用户的设置
overrideSystemProperties:用来标识外部配置是否能够覆盖系统属性,默认为true
客户端通过如上配置,可以实现本地配置优先级更高,且不能被覆盖。【有的版本不生效】
源码:https://github.com/jxnu-liguobin/SpringCloud-Learning/tree/master/springcloudconfigclientdemo