springboot配置扫描生效顺序

文章目录

  • 举例分析
    • 项目结构如下
    • noddles-user-backend 两个配置文件
    • noddles-user-job 配置文件
    • noddles-user-server 配置文件
    • 问题:server和Job启动时对应加载的数据库配置为哪一个?
  • 总结

在微服务架构中,backend模块会定义一个基础的配置文件,在每个微服务中,也会定义一个自己的配置文件,每个微服务通过继承方式,每个服务都需要的内容放在backend模块,避免在每个微服务中重复定义,减少管理成本。

在实际工作中,本地开发、测试和上线环节,需要使用不一样的配置信息运行服务,再加上有些服务要同时支持国内和海外,需要管理的配置信息就达到了3 * 2=6套,有的甚至同一个场景下,提供了多种资源选择,如何控制在对应运行环境下加载正确的配置信息?

举例分析

下面是公司的一个实际项目中所有配置文件,

项目结构如下

<modules><module>noodles-user-common</module><module>noodles-user-client</module><module>noodles-user-server</module><module>noodles-user-job</module><module>noodles-user-backend</module></modules>

其中noddles-user-server(提供http和rpc接口)、noddles-user-job(定时任务)是两个可以独立运行的服务。

noddles-user-backend 两个配置文件

application.yaml

authFilter:appKey: ApeinternationalEnabled: truedefaultProductId: 1000# ServiceInstanceMeta
serviceInstanceMeta:serviceName: noddles-usersecurity.filterOrder: 20# MySQL 连接配置
noddlesUser.mysql:dynamicConfigEnabled: truedynamicConfigKey: noddles_user-pyIXkE-testdynamicConfigGroup: op-dba-mysql-confreadWriteSplit: truetestOnBorrow: truevalidationQuery: SELECT 1# 数据库自动初始化 默认关闭
spring.datasource.initialize: false# Actuator 配置
actuator:project: noddles-userfdc.projectIdentity: noddles-userspring.profiles.active: local,sg-test,soho-testlogging.access.directory: /home/shared/logspring:profiles:include: backend-oversea# 本地环境
---
spring:profiles: localrpcServer.zkNode: false
logging.access.enabled: false
actuator.enabled: false---
# 测试服务环境
spring:profiles: testlogging.config: classpath:log4j2.test.yaml---
# 线上服务环境
spring:profiles: onlineremind.env: 线上---
# 测试服务环境
spring:profiles: bj-testalimq.topics:userLogin:cluster: noddles_testtopic: JIALIDUN_NOODLES_USER_LOGIN_TESTconsumerId: GID_JIALIDUN_NOODLES_USER_LOGIN_TEST---
# 线上服务环境
spring:profiles: bj-onlinenoddlesUser.mysql:dynamicConfigEnabled: truedynamicConfigKey: noddles-user-online-noddles_user-onlinedynamicConfigGroup: op-dba-mysql-confreadWriteSplit: truetestOnBorrow: truevalidationQuery: SELECT 1alimq.topics:userLogin:cluster: noddles_onlinetopic: JIALIDUN_NOODLES_USER_LOGIN_ONLINEconsumerId: GID_JIALIDUN_NOODLES_USER_LOGIN_ONLINE---
# 大兴测试机房
spring:profiles: soho-test# ZooKeeper 配置
zkServers: zk1-test,zk2-test,zk3-test,zk4-test,zk5-test---
# 廊坊测试机房
spring:profiles: rz-test# ZooKeeper 配置
zkServers: zk1-test,zk2-test,zk3-test,zk4-test,zk5-test---
# 大兴线上机房
spring:profiles: dx-onlinezkServers: dx-zk1,dx-zk2,dx-zk3,dx-zk4,dx-zk5---
# 廊坊线上机房
spring:profiles: lf-onlinezkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5---
# 阿里新加坡线上机房
spring:profiles: alisg-onlinezkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5

application-backend-oversea.yaml

# 海外测试服务环境
spring:profiles: sg-testnoddlesUser.mysql:dynamicConfigEnabled: truedynamicConfigKey: noddles_sg_user-NwQVE1-testdynamicConfigGroup: op-dba-mysql-confreadWriteSplit: truetestOnBorrow: truevalidationQuery: SELECT 1alimq.topics:userLogin:cluster: noddles_sg_testtopic: JIALIDUN_NOODLES_USER_LOGIN_TESTconsumerId: GID_JIALIDUN_NOODLES_USER_LOGIN_TEST---
# 海外线上服务环境
spring:profiles: sg-onlinenoddlesUser.mysql:dynamicConfigEnabled: truedynamicConfigKey: noddles_sg_user-r5vJDb-onlinedynamicConfigGroup: op-dba-mysql-confreadWriteSplit: truetestOnBorrow: truevalidationQuery: SELECT 1alimq.topics:userLogin:cluster: noddles_sg_onlinetopic: JIALIDUN_NOODLES_USER_LOGIN_ONLINEconsumerId: GID_JIALIDUN_NOODLES_USER_LOGIN_ONLINE---
# 测试环境海外机房
spring:profiles: qcbj3-test# ZooKeeper 配置
zkServers: soho-zk1,soho-zk2,soho-zk3,soho-zk4,soho-zk5---
# 线上海外虚拟机房
spring:profiles: alibj1-onlinezkServers: lf-zk1,lf-zk2,lf-zk3,lf-zk4,lf-zk5---
# 线上新加坡机房
spring:profiles: alisg-onlinezkServers: lf-zk1,lf-zk2

noddles-user-job 配置文件

spring:profiles:include: backendcommon.xxl.job.executor:appname: noddles-user-jobmailer:biz: noddles---
# 配置类型:region+环境相关配置
# 配置用途:用于同时与region和环境相关的配置,或者仅与region相关的配置
# region-环境:新加坡-测试
spring:profiles: sg-testcommon.xxl.job.executor:appname: noddles-user-job-sg---
# 配置类型:region+环境相关配置
# 配置用途:用于同时与region和环境相关的配置,或者仅与region相关的配置
springprofiles: sg-onlinecommon.xxl.job.executor:appname: noddles-user-job-sg

noddles-user-server 配置文件

authFilter:appKey: ApeinternationalEnabled: truedefaultProductId: 1000# ServiceInstanceMeta
serviceInstanceMeta:serviceName: noddles-usercommon.xxl.job.executor:appname: noddles-user# Web Server 配置
server:port: 8080tomcat:maxThreads: 500# Rpc Server 配置
rpcServer:port: 5000zkNode: /noddles-user/rpc/v1 
---
spring.profiles.include: backend---
# 配置类型:region+环境相关配置
# 配置用途:用于同时与region和环境相关的配置,或者仅与region相关的配置
# region-环境:新加坡-测试
spring:profiles: sg-testcommon.xxl.job.executor:appname: noddles-user-sg---
# 配置类型:region+环境相关配置
# 配置用途:用于同时与region和环境相关的配置,或者仅与region相关的配置
# region-环境:新加坡-线上
spring:profiles: sg-onlinecommon.xxl.job.executor:appname: noddles-user-sg

问题:server和Job启动时对应加载的数据库配置为哪一个?

先公布答案时noddles_sg_user-NwQVE1-test这个数据库,位于soho-test环境下。

以noodles-user-server项目启动为例,对数据配置扫描加载顺序进行分析。

启动noodles-user-server,加载对应配置信息,扫描到spring.profiles.include: backend,解析并合并application-backend.yaml中配置信息(springBoot按照规定进行二者的关联和查找),在application-backend.yaml,指明了在默认情况下要使用环境spring.profiles.active: local,sg-test,soho-test,这样配置之后,会将公共配置信息和 local,sg-test,soho-test配置信息都进行扫描加载,相同配置项,后加载的覆盖之前加载,公共配置的数据库为noddles_user-pyIXkE-test,local没有配置数据库,soho-test也没有配置数据库信息,sg-test配置了noddles_sg_user-NwQVE1-test,因此最终生效的是noddles_sg_user-NwQVE1-test数据库,详细扫描并加载数据配置顺序如下图:
在这里插入图片描述

总结

在多文件,多profile环境下,配置信息扫描加载顺序为「同一个文件,从上到下-》遇到include,递归扫描加载-〉spring.profiles.active多个环境,从左到右依次扫描加载」,后加载的总是覆盖先加载的。

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

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

相关文章

Report Design Analysis报告之logic level详解

目录 一、前言 二、Logic Level distribution 2.1 logic level配置 2.2 Logic Level Distribution报告 2.3 Logic Level 报告详情查看 2.4 Route Distributions 报告详情查看 2.5 示例代码 一、前言 ​在工程设计中&#xff0c;如果需要了解路径的逻辑级数&#xff0c;可…

卷积神经网络基础篇

文章目录 1、卷积层1.1、激活函数1.3、sigmoid1.4、Tanh1.5、ReLU1.6、Leaky ReLU1.7、误差计算 2、池化层3、全连接层4、CNN训练 参考链接1 参考链接2 1、卷积层 卷积层&#xff08;Convolutional layer&#xff09;&#xff0c;这一层就是卷积神经网络最重要的一个层次&…

动手学深度学习(Pytorch版)代码实践 -循环神经网络- 56门控循环单元(`GRU`)

56门控循环单元&#xff08;GRU&#xff09; 我们讨论了如何在循环神经网络中计算梯度&#xff0c; 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义&#xff1a; 我们可能会遇到这样的情况&#xff1a;早期观测值对预测…

机器人动力学模型及其线性化阻抗控制模型

机器人动力学模型 机器人动力学模型描述了机器人的运动与所受力和力矩之间的关系。这个模型考虑了机器人的质量、惯性、关节摩擦、重力等多种因素&#xff0c;用于预测和解释机器人在给定输入下的动态行为。动力学模型是设计机器人控制器的基础&#xff0c;它可以帮助我们理解…

2024/7/7周报

文章目录 摘要Abstract文献阅读题目问题本文贡献问题描述图神经网络Framework实验数据集实验结果 深度学习MAGNN模型相关代码GNN为什么要用GNN&#xff1f;GNN面临挑战 总结 摘要 本周阅读了一篇用于多变量时间序列预测的多尺度自适应图神经网络的文章&#xff0c;多变量时间序…

SAP已下发EWM的交货单修改下发状态

此种情况针对EWM未接收到ERP交货单时&#xff0c;可以使用此程序将ERP交货单调整为未分配状态&#xff0c;在进行调整数据后&#xff0c;然后使用VL06I&#xff08;启用自动下发EWM配置&#xff0c;则在交货单修改保存后会立即下发EWM&#xff09;重新下发EWM系统。 操作步骤如…

3ds Max渲染曝光过度怎么办?

3dmax效果图云渲染平台——渲染100 以3ds Max 2025、VR 6.2、CR 11.2等最新版本为基础&#xff0c;兼容fp、acescg等常用插件&#xff0c;同时LUT滤镜等参数也得到了同步支持。 注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 遇到3ds Max渲染过程中曝光过度的问题&#xf…

SLF4J的介绍与使用(有logback和log4j2的具体实现案例)

目录 1.日志门面的介绍 常见的日志门面 &#xff1a; 常见的日志实现&#xff1a; 日志门面和日志实现的关系&#xff1a; 2.SLF4J 的介绍 业务场景&#xff08;问题&#xff09;&#xff1a; SLF4J的作用 SLF4J 的基本介绍 日志框架的绑定&#xff08;重点&#xff09…

跨越界限的温柔坚守

跨越界限的温柔坚守 —— 郑乃馨与男友的甜蜜抉择在这个光怪陆离、瞬息万变的娱乐圈里&#xff0c;每一段恋情像是夜空中划过的流星&#xff0c;璀璨短暂。然而&#xff0c;当“郑乃馨与男友甜蜜约会”的消息再次跃入公众视野&#xff0c;它不仅仅是一段简单的爱情故事&#xf…

iOS中多个tableView 嵌套滚动特性探索

嵌套滚动的机制 目前的结构是这样的&#xff0c;整个页面是一个大的tableView, Cell 是整个页面的大小&#xff0c;cell 中嵌套了一个tableView 通过测试我们发现滚动的时候&#xff0c;系统的机制是这样的&#xff0c; 我们滑动内部小的tableView, 开始滑动的时候&#xff0c…

C/C++ 代码注释规范及 doxygen 工具

参考 谷歌项目风格指南——注释 C doxygen 风格注释示例 ubuntu20 中 doxygen 文档生成 doxygen 官方文档 在 /Doxygen/Special Command/ 章节介绍 doxygen 的关键字 注释说明 注释的目的是提高代码的可读性与可维护性。 C 风格注释 // 单行注释/* 多行注释 */ C 风格注…

【论文阅读笔记】Meta 3D AssetGen

【论文阅读笔记】Meta 3D AssetGen: Text-to-Mesh Generation with High-Quality Geometry, Texture, and PBR Materials Info摘要引言创新点 相关工作T23D基于图片的3d 重建使用 PBR 材料的 3D 建模。 方法文本到图像:从文本中生成阴影和反照率图像Image-to-3D:基于pbr的大型重…

搭建NEMU与QEMU的DiffTest环境(动态库方式)

搭建NEMU与QEMU的DiffTest环境&#xff08;动态库方式&#xff09; 1 DiffTest原理简述2 编译NEMU3 编译qemu-dl-difftest3.1 修改NEMU/scripts/isa.mk3.2 修改NEMU/tools/qemu-dl-diff/src/diff-test.c3.3 修改NEMU/scripts/build.mk3.4 让qemu-dl-difftest带调试信息3.5 编译…

安卓的组件

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【Linux】打包命令——tar

打包和压缩 虽然打包和压缩都涉及将多个文件组合成单个实体&#xff0c;但它们之间存在重要差异。 打包和压缩的区别&#xff1a; 打包是将多个文件或目录组合在一起&#xff0c;但不对其进行压缩。这意味着打包后的文件大小可能与原始文件相同或更大。此外&#xff0c;打包…

数字化精益生产系统--APS 排程管理系统

APS&#xff08;Advanced Planning and Scheduling&#xff09;排程管理系统&#xff0c;即高级生产计划与排程系统&#xff0c;是一种高度智能化的计划和排程系统。它通过整合各种生产和供应链数据&#xff0c;运用先进的算法和数据模型&#xff0c;根据各种约束条件&#xff…

MySQL篇三:数据类型

文章目录 前言1. 数值类型1.1 tinyint类型1.2 bit类型1.3 小数类型1.3.1 float1.3.2 decimal 2. 字符串类型2.1 char2.2 varchar2.3 char和varchar比较 3. 日期类型4. enum和set 前言 数据类型分类&#xff1a; 1. 数值类型 1.1 tinyint类型 在MySQL中&#xff0c;整型可以指…

【Java13】包

“包”这个机制&#xff0c;类似于分组。主要作用是区分不同组内的同名类。例如&#xff0c;高三三班有一个“王五”&#xff0c;高二八班也有一个“王五”。高三三班和高三八班就是两个不同的包。 Java中的包&#xff08;package&#xff09;机制主要提供了类的多层命名空间&…

HTTP长连接

长连接优点 HTTP为什么要开启长连接呢? 主要是为了节省建立的时间,请求可以复用同一条TCP链路,不用重复进行三握+四挥 如果没有长连接,每次请求都做三握+四挥 如果有长链接,在一个 TCP 连接中可以持续发送多份数据而不会断开连接,即请求可以复用TCP链路 长连接缺点 …

第六十八回 东平府误陷九纹龙 宋公明义释双枪将-文心大模型ernie-speed免费使用方法

宋江和卢俊义抓阄儿&#xff0c;宋江打东平府&#xff0c;卢俊义打东昌府&#xff0c;谁先打下谁做梁山泊主。宋江带领林冲、花荣、刘唐等二十八人&#xff0c;卢俊义带领吴用、公孙胜、关胜等二十八人。 宋江等人到了东平府外安山镇&#xff0c;郁保四和王定六自告奋勇去下战…