Springboot引用外部配置文件的方法步驟
現(xiàn)在的項(xiàng)目越來(lái)越多的都是打包成jar運(yùn)行尤其是springboot項(xiàng)目,這時(shí)候配置文件如果一直放在項(xiàng)目中,每次進(jìn)行簡(jiǎn)單的修改時(shí)總會(huì)有些不方便,這里我們看下打包成jar之后,從外部配置文件中讀取配置信息。
首先想到的是通過(guò)java代碼讀取外邊某個(gè)路徑下的文件,但是開(kāi)始做之后發(fā)現(xiàn)好多問(wèn)題。后來(lái)又找其它解決方案,正好搜到一種簡(jiǎn)單的解決方式:
java -jar demo.jar --Dspring.config.location=myapplication.properties
這樣就可以通過(guò)@value注解讀取myapplication.properties中的配置信息了。(上邊的大寫(xiě)D好像可以不寫(xiě)的)
后來(lái)想著直接把spring.config.location寫(xiě)到application.properties配置文件中,然后指定一個(gè)固定的外部配置文件來(lái)獲取信息,這樣啟動(dòng)的時(shí)候就可以不用加最后一行了。
spring.config.location=C:\\Users\\Administrator\\git\\Display\\host.properties
可是這種方式是行不通的,比如我配置文件中有下面信息:
myname=hellopangkunkun
代碼:
myname=hellopangkunkun
我在啟動(dòng)的時(shí)候直接報(bào)這個(gè)地方的錯(cuò)誤,說(shuō)是無(wú)法找到myname,導(dǎo)致整個(gè)項(xiàng)目出異常。
后來(lái)搜了下文章,對(duì)比官網(wǎng)文檔,又得到了一些信息:
24.3 Application property files
SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:A /config subdirectory of the current directory.
The current directory
A classpath /config package
The classpath root
The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).
這里說(shuō)了四種方式可以把配置文件放到外部的。
第一種是在jar包的同一目錄下建一個(gè)config文件夾,然后把配置文件放到這個(gè)文件夾下;
第二種是直接把配置文件放到j(luò)ar包的同級(jí)目錄;
第三種在classpath下建一個(gè)config文件夾,然后把配置文件放進(jìn)去;
第四種是在classpath下直接放配置文件。
這四種方式的優(yōu)先級(jí)是從一到四一次降低的。
注: 一二兩種方案其實(shí)不是jar包的同級(jí)目錄,而是(執(zhí)行啟動(dòng)指令的)同級(jí)目錄。為了便于理解我把上面的當(dāng)前目錄說(shuō)成jar包的同級(jí)目錄,這種說(shuō)法并不對(duì)。如果是剛開(kāi)始接觸或者調(diào)試這塊,還是在jar包同級(jí)目錄方便。
由于我們是要從外部讀取文件,所以直接說(shuō)前兩種。
看下文件目錄結(jié)構(gòu):
這里的application.properties是我們的配置文件,config是創(chuàng)建的另外一個(gè)目錄,放的也是application.properties。
Display-1.0-SNAPSHOT.jar中可以包含application.properties配置文件也可以不包含。
為了驗(yàn)證可以在config中設(shè)置myname=name1,jar同級(jí)目錄中設(shè)置myname=name2,如果jar中包含配置文件,將其中設(shè)置成myname=name3。
直接使用指令啟動(dòng):
java -jar Display-1.0-SNAPSHOT.jar
之后驗(yàn)證可得知,我們通過(guò)@Value(“${myname}”)獲取到的myname的值是name1,把config下的配置文件刪除后獲取的結(jié)果是name2,都刪除后才會(huì)獲取jar包中配置文件的數(shù)據(jù)name3。
另外如果我們想要想配置測(cè)試、開(kāi)發(fā)、生產(chǎn)環(huán)境一樣使用另外一個(gè)配置文件怎么來(lái)實(shí)現(xiàn)呢?
下面繼續(xù),我把a(bǔ)pplication.properties的信息修改如下:
spring.profiles.active=dev,host
配置文件目錄結(jié)構(gòu):
我又新增了一個(gè)名為application-host.properties的配置文件,同理也可以把這個(gè)文件考出來(lái)放到j(luò)ar包外面,同級(jí)目錄或者config下。
這樣項(xiàng)目啟動(dòng)之后dev配置文件和host配置文件都會(huì)生效。
這里為了突出其他的配置文件我只把host的拷出來(lái)了,dev的還是在jar包里,application.properties配置文件放在jar中也一樣,我們需要的主要是host的配置文件。
這樣每次修改的時(shí)候只需要修改配置文件信息,然后重啟項(xiàng)目就好,不需要重新打包。
如果想要只修改配置文件,不重啟項(xiàng)目就能生效,可以考慮用java來(lái)讀取配置文件中的數(shù)據(jù),把它當(dāng)作一個(gè)普通文件來(lái)讀取,或者寫(xiě)到其他數(shù)據(jù)庫(kù)中也行。上面這些方案已經(jīng)能夠滿足我的需求了,所以其他的不在做了。
最后提個(gè)問(wèn)題,也是我沒(méi)弄明白的,希望知道的各位能夠給個(gè)答案:
我把spring.config.location這個(gè)配置寫(xiě)到配置文件中為什么沒(méi)有生效?
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Spring?boot+LogBack+MDC實(shí)現(xiàn)鏈路追蹤
這篇文章主要介紹了利用Spring?boot+LogBack+MDC實(shí)現(xiàn)鏈路追蹤,MDC?可以看成是一個(gè)與當(dāng)前線程綁定的哈希表,可以往其中添加鍵值對(duì),下文詳細(xì)介紹需要的小伙伴可以參考一下2022-04-04Java Spring分別實(shí)現(xiàn)定時(shí)任務(wù)方法
這篇文章主要為大家詳細(xì)介紹了Java與Spring設(shè)置動(dòng)態(tài)定時(shí)任務(wù)的方法,定時(shí)任務(wù)的應(yīng)用場(chǎng)景十分廣泛,如定時(shí)清理文件、定時(shí)生成報(bào)表、定時(shí)數(shù)據(jù)同步備份等2022-07-07Spring Boot中的JdbcTemplate是什么及用法小結(jié)
Spring Boot中的JdbcTemplate是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)訪問(wèn)工具,它簡(jiǎn)化了數(shù)據(jù)庫(kù)操作的過(guò)程,在本文中,我們了解了JdbcTemplate的基本概念,并演示了如何在Spring Boot應(yīng)用程序中使用它,感興趣的朋友跟隨小編一起看看吧2023-10-10關(guān)于idea的gitignore文件編寫(xiě)及解決ignore文件不生效問(wèn)題
這篇文章主要介紹了idea的gitignore文件編寫(xiě)及解決ignore文件不生效問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03詳解Spring Boot Oauth2緩存UserDetails到Ehcache
這篇文章主要介紹了詳解Spring Boot Oauth2緩存UserDetails到Ehcache,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08Spring?Cloud?Ribbon?中的?7?種負(fù)載均衡策略的實(shí)現(xiàn)方法
Ribbon?內(nèi)置了?7?種負(fù)載均衡策略:輪詢策略、權(quán)重策略、隨機(jī)策略、最小連接數(shù)策略、重試策略、可用性敏感策略、區(qū)域性敏感策略,并且用戶可以通過(guò)繼承?RoundRibbonRule?來(lái)實(shí)現(xiàn)自定義負(fù)載均衡策略,對(duì)Spring?Cloud?Ribbon負(fù)載均衡策略相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03Spring?MVC基于注解的使用之JSON數(shù)據(jù)處理的方法
這篇文章主要介紹了Spring?MVC基于注解的使用JSON數(shù)據(jù)處理,json是一種輕量級(jí)的數(shù)據(jù)交換格式,是一種理想的數(shù)據(jù)交互語(yǔ)言,它易于閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05SpringBoot?Test的webEnvironment源碼解讀
這篇文章主要為大家介紹了SpringBoot?Test的webEnvironment源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Mybatis Plus 字段為空值時(shí)執(zhí)行更新方法未更新解決方案
這篇文章主要介紹了Mybatis Plus 字段為空值時(shí)執(zhí)行更新方法未更新解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09