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.pswp.cn/diannao/42599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42599.shtml
英文地址,請注明出處:http://en.pswp.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;可…

CentOS7安裝部署Anaconda

文章目錄 CentOS7安裝部署Anaconda一、前言1.組件2.環境 二、正文1.下載安裝腳本2.安裝Anaconda3.常用指令 CentOS7安裝部署Anaconda 一、前言 1.組件 Anaconda 開源的Anaconda個人版 &#xff08;正式為Anaconda發行版&#xff09;是在Linux&#xff0c;Windows和Mac OS X上…

卷積神經網絡基礎篇

文章目錄 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;它可以幫助我們理解…

html的浮動作用詳解

HTML中的“浮動”&#xff08;Float&#xff09;是一個CSS布局技術&#xff0c;它原本設計用于文本環繞圖像或實現簡單的布局效果&#xff0c;比如并排排列元素。然而&#xff0c;隨著Web開發的演進&#xff0c;浮動也被廣泛用于更復雜的頁面布局設計中&#xff0c;盡管現代CSS…

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…

Influxdb中,Flux常用的函數

目錄 一、Flux常用的函數及其簡要描述 1. 數據源和篩選函數 2. 聚合函數 3. 時間序列操作函數 4. 轉換和映射函數 5. 窗口函數 6. 其他常用函數 注意事項 二、使用方法舉例 1. 數據源和篩選 2. 聚合 3. 時間序列操作 4. 窗口函數 5. 轉換和映射 注意事項 三、…

跨越界限的溫柔堅守

跨越界限的溫柔堅守 —— 鄭乃馨與男友的甜蜜抉擇在這個光怪陸離、瞬息萬變的娛樂圈里&#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 風格注…

設置某些路由為公開訪問,不需要登錄狀態即可訪問

在單頁面應用&#xff08;SPA&#xff09;框架中&#xff0c;如Vue.js&#xff0c;路由守衛是一種非常有用的功能&#xff0c;它允許你控制訪問路由的權限。Vue.js 使用 Vue Router 作為其官方路由管理器。路由守衛主要分為全局守衛和組件內守衛。 以下是如何設置路由守衛以允…

k8s 部署RuoYi-Vue-Plus之mysql搭建

1.直接部署一個pod 需要掛載存儲款, 可參考 之前文章設置 https://blog.csdn.net/weimeibuqieryu/article/details/140183843 2.部署yaml 先創建命名空間ruoyi kubectl create namespace ruoyi創建部署文件 mysql-deploy.yaml --- apiVersion: v1 kind: PersistentVolume …

【論文閱讀筆記】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 編譯…

C語言實現字符串排序

如果只有英文字符且不區分大小寫的話按照字典序排序可以用strcmp函數&#xff0c;兩個字符串自左向右逐個字符相比&#xff08;按ASCII值大小相比較&#xff09; strcmp(s1,s2) 當s1<s2時&#xff0c;返回為負數&#xff1b; 當s1s2時&#xff0c;返回值 0&#xff1b; …

安卓的組件

人不走空 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌賦&#xff1a;斯是陋室&#xff0c;惟吾德馨 目錄 &#x1f308;個人主頁&#xff1a;人不走空 &#x1f496;系列專欄&#xff1a;算法專題 ?詩詞歌…