導航:首頁 > 文件管理 > spring讀取配置文件的註解

spring讀取配置文件的註解

發布時間:2024-09-10 00:44:38

⑴ Spring Boot讀取properties配置文件中的數據

GitHub: SpringBootDemo

Gitee: SpringBootDemo

微信公眾號:

Spring Boot讀取properties配置文件數據主要有以下三種方法:

1. 使用@Value註解讀取

在讀取properties配置文件時,默認讀取的是application.properties。

application.properties:

java代碼

運行結果如下:

如果需要將部分數據放到一個單獨的類A中進行讀取,然後在類B中調用,則需要在類A上添加@Component註解,並在類B中使用@Autowired自動裝配類A,代碼如下。

類A:

類B:

運行結果如下:

注意:如果@Value${}所包含的鍵名在application.properties配置文件中不存在,會拋出異常。

2. 使用Environment讀取

application.properties:

Java代碼:

運行,發現中文亂碼:

在application.properties中進行如下配置:

然後修改IntelliJ IDEA,File -> Settings -> Editor -> File Encodings ,將最下方Default encoding for properties files設置為UTF-8,並勾選Transparent native-to-ascii conversion。

重新運行結果如下:

3. 使用@ConfigurationProperties註解讀取

在實際項目中,當項目需要注入的變數值很多時,上述所述的兩種方法工作量會變得比較大,這時我們通常使用基於類型安全的配置方式,將properties屬性和一個Bean關聯在一起,即使用大絕註解@ConfigurationProperties讀取配置文件數據。

在src\main\resources下新建config.properties配置文件:

創建ConfigBeanProp並注入config.properties中的值:

使用時,先使用@Autowired自碧棗動裝載ConfigBeanProp,然後再進悔仿拆行取值,示例如下:

運行結果如下:

GitHub:

CSDN:

微信:

微博:

⑵ Springboot 讀取配置文件原理

Springboot 讀取配置文件(application.yaml, application.properties)的過程發生在SpringApplication#prepareEnvironment() 階段,而prepareEnvironment又屬於整個Springboot 應用啟動的非常前置階段,因為Environment的准備是後續bean創建的基礎。讓我們來一探啟動是的詳細code。除去StopWatch這些code,可以發現prepareEnvironment 發生在SpringApplication#run 這在整個應用啟動的多步實質性操作中幾乎是第一步。

而prepareEnvironment中最重要的是通過觸發listener(EventPublishingRunListener)來通過#multicastEvent發出。

而#multicastEvent的實現其實也很簡單,找到相關的監聽的listener,然後一個個的調用他們的Listener#onApplicationEvent(event)方法,而這其中就包括了處理configuration文件的listener。
在Springboot 2.4.0 之前這個處理configuration 文件的lister是ConfigFileApplicationListener,在2.4.0之後,處理configuration 文件的lister是,並且對configuration文件的載入做了較大的改變,導致一些行為可能出現了變化,這也就是下面要詳細講的內容。

Springboot 2.4.0之後,configuration 文件的load順序按照優先順序是如下順序(序號大的會被小的覆蓋):

和之前版本比較,整體的屬性載入順序並無調整,只有Application properties(14,15)這里有順序的調整,具體調整為:

如果存在多個active的profiles,例如[Test, Dev], 那麼對於同時存在兩個profile 配置文件中的配置,後面的profile里的配置(Dev)會覆蓋前面profile(Test)里配置的值。

前面講了這么多,終於要引出Springboot 2.4之後配置文件載入的行為變化了。

考慮這樣的情況,如果我想在跑Springboot test的時候指定特定的profile,那麼可以在Test class中加入@ActiveProfile("Test")。 如果我的應用中存在的某個自定義listener中,會根據當前environment 設置profile,如env.addActiveProfile("Dev")。
當前就會有兩個active profile,由於springboot-test會在調用application#run 前利用DefaultActiveProfilesResolver把@ActiveProfile註解定義的profile(Test)先加入了active的profile,等test run的時候 env.addActiveProfile("Dev") 又會把"Dev"也作為active profile 加入,這時候當前的active profile便為["Test", "Dev"]。

據上面介紹,後面的profile(Dev)對應的configuration 會覆蓋前面的(Test)。可Springboot 2.4.0之前的版本為我們做了調整,讓Test class中@ActiveProfile內定義的profile所對應的配置文件成為最高優先順序。

剛才提到在Springboot 2.4.0 之前這個處理configuration 文件的lister是ConfigFileApplicationListener,我們
來看看ConfigFileApplicationListener的相關code。

查看initializeProfiles(),發現此時對profile的順序做了調整,將activatedViaProperty (Test) 放在最後add,於是profile的順序就變成了[Dev, Test]。

在profiles.poll()時原本profile的順序已經倒了過來,已經變為[Dev, Test], 在load()方法中由於後置的Test profile,application-Test.yaml中的值最終生效了。

可是到了Springboot2.4.0之後,ConfigFileApplicationListener被deprecated了,取而代之的是,通過調用來完成configuration載入。
.java

.java

只是老老實實的set了active profile,並沒有調換profile的順序。最後調用定義在spring.factories中的resource loader class來load 配置文件。

YamlPropertySourceLoader.java

插一句,Springboot為我們提供了很好的yaml文件parse的code,當你需要解析yaml文件時不妨直接參考Springboot的YamlPropertySourceLoader

這樣一旦應用升級到Springboot 2.4.0之後相同的test code會使用application-Dev.yaml中配置的值,造成了test結果的改變。
如果要解決這個問題,根據上面介紹的配置文件優先順序順序,可以在@SpringbootTest中設置properties 來作為最終的配置覆蓋當前profile對應的配置。

了解一個框架很不容易,一個小小的變化都有可能造成應用的行為變化,唯有刨根問底,不斷總結才是framework人解決一切問題的不變的方法論。

⑶ springboot讀取配置(springboot讀取配置文件)

springboot獲取復雜的list配置文件

1、我們在使用@ConfigurationProperties(prefix=system)讀取yml配置文件過程中會遇到讀取yml文件中列表。如:yml文件設置訪問白名單,Config裡面使用List集合接收。方法比較簡單。

2、配置文件SpringBoot使用一個全局的配置文件application.propertiesapplication.yml配置文件的埋祥旁作用:修改SpringBoot自動配置的默認值,SpringBoot在底層都給我們自動配置好。

3、第@Configuration註解,讀取配置到類中,批量注入配置屬性第Environment對象,獲取配置文件中所有的屬性的對象如果你想掌握時下熱門微服務技術棧,跟上時代技術步伐,就去黑馬程序員官網視頻庫看免費視宴陵頻。

4、nacos跟apollo的處理思路有點不一樣,找了很多資料,貌似沒有找到nacos里直接獲取整個獲取配置文件的方法,後面如果有同學找到了這個方法記得留言提醒我。nacos在springboot啟動的時候已經把所有配置文件都注入到了spring里。

Springboot打成JAR包後讀取外部配置文件

1、自定義jar目前只能讀取application.properties和application.yml吧。可以用一個簡單點的方法進行監聽注入,在工具包內寫一個init方法,在springboot啟動時初始化就可以了。比如springboot啟動完成後讀取配置文件,然後注入到工具包內。

2、在此處,我們可以使用java-jardemo-0.01-SNAPSHOT來運行項目。正常運行。當我們將其打成jar包時,application.properties同樣不會被打包進jar包中。需要另外復制出來和jar包放在才能正常運行。

3、以jar包發布springboot項目時,默認會先使用jar包同級目錄下的application.properties來作為項目配置文件。但使用--spring.config.location指定了配置文件,則讀取指定的配置文件。

SpringBoot配置文件存放位置以及讀取順序

SpringBoot系統啟動時默認會讀取的配置文件,支持propertiesyml格式。也就是說,會先載入application.properties,根據spring.profile.active的設置載入相應的application-XX.properties配置,然後按優先順序合並配置文件。

使用springboot的方式,此種方式jar需要放到前面格式例如以jar包發布springboot項目時,默認會先使用jar包同級目錄下的application.properties來作為項目配置文件。

application.properties中:server.port=8001,application.yml中:server.port=8888。問題:springboot是否都載入這兩個配置文件?如果兩個文件有相同的key,取哪一個文件的value?答:都載入,且按properties→yml的順彎橡序載入。

springboot配置文件支持靈活的路徑,以及靈活的文件名,用一個變數表達式總結如下:部分源碼如下:當滿足上述變數表達式的配置文件有多個時,會有一個配置的優先順序。

springboot中獲取apollo或者nacos里的配置文件

此時,需要在bootstrap.yml中添加springcloud配置:(至於為什麼是bootstrap.yml而不是application.yml,這又是另一個問題了)有了上面的配置,程序啟動後,就能正常的從nacos配置中心獲取配置了。

在application.yaml配置文件中指定nacos中配置的DataID不會生效,需要通過註解@NacosPropertySource指定才能生效。

nacos-config這個依賴就相當於SpringCloudConfig,nacos-discovery這個依賴就相當於Eureka。

一文講清楚SpringBoot六種讀取配置方式

1、使用開發工具創建一個純凈maven工程刪除配置spring-biz.xml並且新增如下配置:本文梳理了SpringBoot六種讀取配置方式,大家在項目中可以進行靈活組合和應用,希望本文對大家有所幫助。

2、則只會根據classloader的classpath列表,選取第一個出現的文件。因為springboot載入配置文件時最底層是使用的下面的方法:這兩個方法只會獲取classloader類的ucp屬性裡面第一個匹配到的值。

3、idea中,為了我們本地方便開發測試,我們在此處創建一個config目錄,然後把application.properties放進去,項目正常運行。jar包會自動生成在target目錄下。

4、配置文件SpringBoot使用一個全局的配置文件application.propertiesapplication.yml配置文件的作用:修改SpringBoot自動配置的默認值,SpringBoot在底層都給我們自動配置好。

5、SpringBoot中的配置文件主要有三種格式,properties、yaml、和xml方式。

6、SpringBoot系統啟動時默認會讀取的配置文件,支持propertiesyml格式。也就是說,會先載入application.properties,根據spring.profile.active的設置載入相應的application-XX.properties配置,然後按優先順序合並配置文件。

springboot配置文件讀取

nacos在springboot啟動的時候已經把所有配置文件都注入到了spring里。

idea中,為了我們本地方便開發測試,我們在此處創建一個config目錄,然後把application.properties放進去,項目正常運行。jar包會自動生成在target目錄下。

這個問題的存在是因為在spring跑到@serviceclass的時候,我們還沒有取到配置文件裡面的value,所以導致了spring認為這個valuevariable沒有initialize。

關於如果修改默認的載入路徑和文件名,後面會繼續討論。SpringBoot系統啟動時默認會讀取的配置文件,支持propertiesyml格式。

⑷ 如何spring使用@value註解讀取配置文件的值

首先在spring的核心配置文件中載入 參數配置文件
然後
@Value("${xxx}")
private String xxx

閱讀全文

與spring讀取配置文件的註解相關的資料

熱點內容
如何下載友邦app 瀏覽:19
win10系統載入的時間很慢 瀏覽:991
ug配置文件放在哪 瀏覽:235
福昕閱讀器怎麼取消雙擊關閉文件 瀏覽:227
f663n光貓超級密碼配置文件 瀏覽:610
系統與編程有什麼區別 瀏覽:550
軍隊計算機網路安全評估方法 瀏覽:252
編程時如何將文字資料封裝 瀏覽:985
ipad2升級ios1032 瀏覽:469
win10文件健康顏色 瀏覽:581
nodejs視頻網站 瀏覽:747
ssleay32dll版本 瀏覽:144
桂林網站建設需要多少錢 瀏覽:84
手機找不到arcaea文件 瀏覽:86
征途客戶端找不到某個文件 瀏覽:582
網路營銷經驗有哪些 瀏覽:517
u盤文件怎麼轉換手機 瀏覽:861
騰訊視頻下載文件在哪裡找 瀏覽:151
山西報考消防工程在什麼網站 瀏覽:791
java基本語法及關鍵字chm 瀏覽:964

友情鏈接