简单了解一下SpringCloudConfig的properties的匹配原理(下)

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这个核心beaninit就会报错,要么应用启不起来,要么请求时报内部错误。

使用JMX,这个不会,就不说了。。。

3、    查看源码

1、在spring-configuration-metadata.json中配置了默认请求服务端URL,且使用HTTP连接

同时还有配置默认的快速失败为false,默认分支master等等主要配置均在此文件中

3、    在同文件夹的spring.factories中定义了自动配置所需要引入的类,【同样适用springboot其他组件】

该文件内容如下:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.config.client.ConfigClientAutoConfiguration

# Bootstrap components
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.config.client.ConfigServiceBootstrapConfiguration,\
org.springframework.cloud.config.client.DiscoveryClientConfigServiceBootstrapConfiguration

 

 

此时可以看到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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值