Apollo提前加载问题

news2025/7/20 9:29:15

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang 中 sync/atomic 包的原子操作

背景 Go中多协程的情况下, 要保证操作的原子性,一般要使用RWMutex或者Mutex, 但是锁使用起来比较复杂,还要考虑lock 和unlock 顺序和成对出现,不注意就容易出错。 于是在sync/atomic包中,把我们常用的一些…

【源码库】跟着 Vue3 学习前端模块化

Vue3为了支持不同的用户群体,提供了多种模块化方案,这样使得我们在使用的Vue的使用可以有很多种方式; 例如我们可以直接在html中使用script标签引入Vue,也可以前端工程化工具,例如webpack、rollup等打包工具&#xff…

2023年湖北一级技师二级技师报名时间、考试时间是什么时候?

2023年湖北一级技师二级技师报名时间、考试时间是什么时候? 技师是属于职业资格证书,是各行业的高级技术人员中设置的技术职务。技师是技能高超的技术人员、能工巧匠,具有丰富的实践经验,能在本工种难度较大的工艺加工、复杂设备、…

数据治理之数据梳理

目录 1.定义 2.用途作用 3.实施方法 3.1自上而下 3.1.1数据域梳理 3.1.2数据主题梳理 3.1.3 数据实体梳理 3.1.4设计数据模型 3.1.5优点 3.1.5缺点 3.2自下而上 3.2.1需求分析 3.2.2展现 3.2.3分析逻辑 3.2.4数据建模 3.2.5优点 3.2.6缺点 1.定义 “数据梳理”即对…

C语言例程:用二维数组实现矩阵转置

用二维数组实现矩阵转置 本实例将输入的 34 矩阵转置为 43 矩阵,并输出结果。通过本实例,可以学习如何使用二 维数组。 实例解析 二维数组的定义 二维数组定义的一般形式为: 第一部分 基础篇 X2277 类型说明符 数组名[常量表达式][常量表…

STM32移植FreeRTOS操作系统

一、FreeRTOS源码下载(1)移植钱得准备前菜对吧,我们先来去官网瞄一瞄网址:https://freertos.org/zh-cn-cmn-s/ 第一步:点击下载FreeRTOS第二步:选择版本下载(我选择稳定版本)注&…

git 双因子身份登录遇到的问题及解决方法

git 双因子身份登录描述: 一般我们登录账号和密码的时候都是通过git的账号和密码直接登录即可,但是如果我们用双因子身份进行登录的时候发现用账号和密码登录一直登录不了,,,,有点emo了。。 git 双因子身份…

CentOS8基础篇13:yum与dnf软件包管理器

一、YUM工具的使用 yum可以说是一个管理rpm软件包的前端工具,其基于rpm软件包进行管理,能够从指定服务器自动下载rpm软件包并进行安装,可以自动处理依赖关系,并一次安装所有需要的软件包。在RHEL本地操作系统中设置相应的软件仓库…

SAP smartforms打印图片

注意:SAP只能上传打印bmp格式图片 1.标准程序上传 T-CODE:SE78 2.程序代码上传 DATA: P_FILENAME TYPE RLGRAP-FILENAME,P_NAME TYPE STXBITMAPS-TDNAME,P_TITLE LIKE BAPISIGNAT-PROP_VALUE,P_DOCID TYPE STXBITMAPS-DOCID,P_RESOLUTION TYPE …

案例分析之——理由Mybatis动态SQL实现复用

无复用思想的做法: 在没有复用思想的时候,就只顾着实现功能。比如开发过程中涉及到两个表的更新功能,每需要更新一处,就写一个接口,结果出现了写了11个接口的情况。 这样虽然功能实现了,可是可能自…

express+websocket实现线上聊天

1.webSocket简介 WebSocket是一种通信协议,可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两…

SpringCloud之 Hystrix服务熔断

文章目录一、Hystrix 服务熔断 (已过时)🍉1.1 服务降级🍉1.2 服务熔断🍉1.3 OpenFeign 实现降级二、hystrix-dashboard 监控🍋2.1 监控页面部署🍋2.2 观察现象提示:以下是本篇文章正文内容,Spri…

【PySide6】信号(signal)和槽函数(slot),以及事件过滤器

说明 在PYQT中,父控件可以通过两种方式响应子控件的事件: 通过信号(signal)和槽函数(slot)机制连接子控件和父控件父控件可以通过设置eventFilter()方法来监听响应子控件的事件 一、信号(signal)和槽函数(slot) 示例 在PYQT中,每个组件都…

传输线的物理基础(三):传输线的瞬时阻抗

每个信号都有一个上升时间 RT,通常是从 10% 到 90% 的电压电平测量的。当信号沿传输线向下移动时,前沿在传输线上展开并具有空间范围。如果我们可以冻结时间并观察电压分布向外移动时的大小,我们会发现类似下图的东西。传输线上上升时间的长度…

Python中的三器一闭(详细版)

python中的三器一闭迭代器什么是迭代什么是可迭代对象判断数据是否可迭代什么是迭代器迭代器的本质使用迭代器取数据自定义迭代器生成器创建生产器的方法关键字yieldnext和send装饰器装饰器的功能定义装饰器闭包什么是闭包函数、匿名函数、闭包、对象 当做实参时的区别迭代器 …

Blazor_WASM之3:项目结构

Blazor_WASM之3:项目结构 Blazor WebAssembly项目模板可选两种,Blazor WebAssemblyAPP及Blazor WebAssemblyAPP-Empty 如果使用Blazor WebAssemblyAPP模板,则应用将填充以下内容: 一个 FetchData 组件的演示代码,该…

蓝桥杯-最优清零方案(2022省赛)

蓝桥杯-最优清零方案1、问题描述2、解题思路3、代码实现1、问题描述 给定一个长度为 N 的数列 1,2,⋯,A1,A2,...,ANA_1,A_2,...,A_NA1​,A2​,...,AN​ 。现在小蓝想通过若干次操作将 这个数列中每个数字清零。 每次操作小蓝可以选择以下两种之一: 1. 选择一个大于 0 的整数, 将…

杂记——18.VSCode的下载及使用

这篇文章,我们来讲一下VSCode,讲一下如何下载及使用VSCode 目录 1.VSCode的下载 1.1VSCode的简介 1.2VSCode的下载与安装 1.2.1下载 1.2.2安装 2.VSCode的使用 2.1界面 2.2基础设置 2.3禁用自动更新 2.3自动保存设置 2.4Vscode更换主题 2.5…

Hive面试题-HQL转换MapReduce底层核心逻辑剖析

视频可查看:https://www.bilibili.com/video/BV1RV41147Tb/?spm_id_from333.999.0.0&vd_source3ba3c3ba31427f60d734ede7a948de4a 原文地址:Hive学习之路 (二十)Hive 执行过程实例分析 - 扎心了,老铁 - 博客园 (c…

K_A14_012基于STM32等单片机驱动GY-25倾斜度角度模块 串口与OLED0.96双显示

K_A14_012基于STM32等单片机驱动GY-25倾斜度角度模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCGY-25倾斜度角度模块1.2、STM32F103C8T6GY-25倾斜度角度模块五、基础知识学习与相关资料下…