没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
springcloud config配置读取优先级过程详解配置读取优先级过程详解
主要介绍了springcloud config配置读取优先级过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者
工作具有一定的参考学习价值,需要的朋友可以参考下
情景描述情景描述
最近在修复Eureka的静态页面加载不出的缺陷时,最终发现是远程GIT仓库将静态资源访问方式配置给禁用了
(spring.resources.add-mappings=false)。虽然最后直接修改远程GIT仓库的此配置项给解决了(spring.resources.add-
mappings=true),但是从中牵涉出的配置读取优先级我们必须好好的再回顾下
springcloud config读取仓库配置读取仓库配置
通过config client模块来读取远程的仓库配置,只需要在boostrap.properties文件中配置如下属性即可
spring.application.name=eureka
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.name=dev
spring.cloud.config.username=dev
spring.cloud.config.password=dev
其就会以GET方式去请求http://localhost:8888/eureka/dev地址从而将配置拉取下来。
当然上述的API地址也是需要被访问服务器部署了config server服务方可调用,具体的细节就不展开了
外部源读取优先级外部源读取优先级
我们都知道spring的配置属性管理均是存放在Enviroment对象中,就以普通项目StandardEnvironment为例,其配置的存放顺
序可罗列如下
顺位顺位 key 来源来源 说明说明
1 commandLineArgs 传入main函数的参数列表 Program arguments
2 systemProperties System.getProperties() JDK属性列表、操作系统属性、-D开头的VM属性等
3 systemEnvironment System.getEnv() 环境属性,例如JAVA_HOME/M2_HOME
4 ${file_name} 配置文件 例如application.yml
5 defaultProperties SpringApplicationBuilder#properties()
那么远程读取的配置的存放应该放在上述的哪个位置呢?
我们都知道boostrap上下文通过暴露org.springframework.cloud.bootstrap.config.PropertySourceLocator接口来方便集成第三
方的外部源配置读取,比如本文提及的config client模块中的
org.springframework.cloud.config.client.ConfigServicePropertySourceLocator实现类。
但最终将外部源配置读取以及插入至Environment对象中则是通过
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration类来完成的。
PropertySourceBootstrapConfiguration
此类也是ApplicationContextInitializer接口的实现类,阅读过cloud源码的都知道,此类被调用是在子类上下文初始化的时候,
我们主要看下其复写的initialize()方法
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
CompositePropertySource composite = new CompositePropertySource(
BOOTSTRAP_PROPERTY_SOURCE_NAME);
// 对在boostrap上下文类型为PropertySourceLocator的bean集合进行排序
AnnotationAwareOrderComparator.sort(this.propertySourceLocators);
boolean empty = true;
ConfigurableEnvironment environment = applicationContext.getEnvironment();
for (PropertySourceLocator locator : this.propertySourceLocators) {
PropertySource<?> source = null;
// 读取外部配置源
source = locator.locate(environment);
if (source == null) {
continue;
}
logger.info("Located property source: " + source);
composite.addPropertySource(source);
empty = false;
}
if (!empty) {
MutablePropertySources propertySources = environment.getPropertySources();
String logConfig = environment.resolvePlaceholders("${logging.config:}");
资源评论
- 本本纲目2023-07-28这篇文章对于springcloud config的配置读取优先级过程的解释清晰明了,非常有帮助。
- 嗨了伐得了2023-07-28这篇文章详细介绍了springcloud config的配置读取优先级过程,对于有需要的人来说是一份非常实用的参考资料。
- 巴蜀明月2023-07-28这篇文章对springcloud config的配置读取优先级过程进行了详细的说明,让我能够迅速了解并运用到实际项目中。
- Jaihwoe2023-07-28这篇文章用简单的语言描述了springcloud config的配置读取优先级过程,很容易理解,非常适合初学者阅读。
- 陈莽昆2023-07-28这篇文章通俗易懂地解析了springcloud config的配置读取优先级过程,让我对这个问题有了更深入的了解。
weixin_38688371
- 粉丝: 8
- 资源: 889
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功