Apollo提前加载问题

Apollo大家应该都有在项目中用到,我们项目也不例外,携程开源的非常好用的配置化平台。今天在搭建新服务的时候发现应为Apollo的配置导致服务启动失败,估次排查一下具体的原因顺便记录下来,翻边后面再次遇到可以查阅解决,顺便也希望可以帮助遇到问题的同学解一下惑。

  1. 问题描述

项目中明明配置了相关配置,但是项目启动的时候就是读取不到相关配置,现象如下。

  1. 问题根源确认

问题根源就是SpringBoot启动加载文件的先后问题,官网上也有人提出这个问题,并且得到了明确的答复。

  1. 解决方案

其实解决方案也不止上面提到的,有几种方案可供咱们解决该问题。

3.1、在properties文件中加载

3.2、采用Apollo官网提供的解决思路:使配置在更早的阶段注入

前提:Apollo 0.10.0及以上版本

# will inject 'application' namespace in bootstrap phase
 apollo.bootstrap.enabled = true
 # put apollo initialization before logging system initialization
 apollo.bootstrap.eagerLoad.enabled=true

4、Spring Boot中@ConditionalOnProperty

4.1、源码

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
 
    // 数组,获取对应property名称的值,与name不可同时使用
    String[] value() default {};
 
    // 配置属性名称的前缀,比如spring.http.encoding
    String prefix() default "";
 
    // 数组,配置属性完整名称或部分名称
    // 可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用
    String[] name() default {};
 
    // 可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置
    String havingValue() default "";
 
    // 缺少该配置属性时是否可以加载。如果为true,没有该配置属性时也会正常加载;反之则不会生效
    boolean matchIfMissing() default false;
 
}

其中:@Conditional(OnPropertyCondition.class)注解是Spring框架提供的注解,OnPropertyCondition.class,优先级特别高,这也于是这他的用途,根据配置初始化合适的bean。

1、public getMatchOutcome

获取匹配的结果

2、private annotationAttributesFromMultiValueMap

根据多个值,映射注解属性

3、private determineOutcome

决定匹配的结果

4、private getNames

获取名称

5、private collectProperties

收集属性

6、private isMatch

判断是否匹配

7、public toString

打印字符串

4.2、作用域

springboot自动化配置的注解,它作用于接口、类、枚举、注解、方法之上

4.3、目的

目的是针对不同的配置,注册不同的配置bean。

参考资料:

1、https://www.cnblogs.com/secbro/p/12011522.html

2、https://github.com/ctripcorp/apollo/issues/903

3、https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97#3213-spring-boot%E9%9B%86%E6%88%90%E6%96%B9%E5%BC%8F%E6%8E%A8%E8%8D%90

4、https://blog.csdn.net/qq_31615049/article/details/90551789

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值