Springboot引用外部配置檔案
現在的專案越來越多的都是打包成jar執行尤其是springboot專案,這時候配置檔案如果一直放在專案中,每次進行簡單的修改時總會有些不方便,這裡我們看下打包成jar之後,從外部配置檔案中讀取配置資訊。
首先想到的是通過java程式碼讀取外邊某個路徑下的檔案,但是開始做之後發現好多問題。後來又找其它解決方案,正好搜到一種簡單的解決方式:
java -jar demo.jar --Dspring.config.location=myapplication.properties
這樣就可以通過@value註解讀取myapplication.properties中的配置資訊了。(上邊的大寫D好像可以不寫的)
後來想著直接把spring.config.location寫到application.properties配置檔案中,然後指定一個固定的外部配置檔案來獲取資訊,這樣啟動的時候就可以不用加最後一行了。
spring.config.location=C:\\Users\\Administrator\\git\\Display\\host.properties
可是這種方式是行不通的,比如我配置檔案中有下面資訊:
myname=hellopangkunkun
程式碼:
@Value("${myname}")
private String name;
我在啟動的時候直接報這個地方的錯誤,說是無法找到myname,導致整個專案出異常。
後來搜了下文章,對比官網文件,又得到了一些資訊:
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).
這裡說了四種方式可以把配置檔案放到外部的。
第一種是在jar包的同一目錄下建一個config資料夾,然後把配置檔案放到這個資料夾下;
第二種是直接把配置檔案放到jar包的同級目錄;
第三種在classpath下建一個config資料夾,然後把配置檔案放進去;
第四種是在classpath下直接放配置檔案。
這四種方式的優先順序是從一到四一次降低的。
注: 一二兩種方案其實不是jar包的同級目錄,而是(執行啟動指令的)同級目錄。為了便於理解我把上面的當前目錄說成jar包的同級目錄,這種說法並不對。如果是剛開始接觸或者除錯這塊,還是在jar包同級目錄方便。
由於我們是要從外部讀取檔案,所以直接說前兩種。
看下檔案目錄結構:
這裡的application.properties是我們的配置檔案,config是建立的另外一個目錄,放的也是application.properties。
Display-1.0-SNAPSHOT.jar中可以包含application.properties配置檔案也可以不包含。
為了驗證可以在config中設定myname=name1,jar同級目錄中設定myname=name2,如果jar中包含配置檔案,將其中設定成myname=name3。
直接使用指令啟動:
java -jar Display-1.0-SNAPSHOT.jar
之後驗證可得知,我們通過@Value(“${myname}”)獲取到的myname的值是name1,把config下的配置檔案刪除後獲取的結果是name2,都刪除後才會獲取jar包中配置檔案的資料name3。
另外如果我們想要想配置測試、開發、生產環境一樣使用另外一個配置檔案怎麼來實現呢?
下面繼續,我把application.properties的資訊修改如下:
spring.profiles.active=dev,host
配置檔案目錄結構:
我又新增了一個名為application-host.properties的配置檔案,同理也可以把這個檔案考出來放到jar包外面,同級目錄或者config下。
這樣專案啟動之後dev配置檔案和host配置檔案都會生效。
這裡為了突出其他的配置檔案我只把host的拷出來了,dev的還是在jar包裡,application.properties配置檔案放在jar中也一樣,我們需要的主要是host的配置檔案。
這樣每次修改的時候只需要修改配置檔案資訊,然後重啟專案就好,不需要重新打包。
如果想要只修改配置檔案,不重啟專案就能生效,可以考慮用java來讀取配置檔案中的資料,把它當作一個普通檔案來讀取,或者寫到其他資料庫中也行。上面這些方案已經能夠滿足我的需求了,所以其他的不在做了。
最後提個問題,也是我沒弄明白的,希望知道的各位能夠給個答案:
我把spring.config.location這個配置寫到配置檔案中為什麼沒有生效?
相關推薦
Springboot引用外部配置檔案
現在的專案越來越多的都是打包成jar執行尤其是springboot專案,這時候配置檔案如果一直放在專案中,每次進行簡單的修改時總會有些不方便,這裡我們看下打包成jar之後,從外部配置檔案中讀取配置資訊。 首先想到的是通過java程式碼讀取外邊某個路徑下的檔案,
Springboot @ConditionalOnResource 解決無法讀取外部配置檔案問題
前言 最近在開發儲存層基礎中介軟體的過程中,使用到了@ConditionalOnResource這個註解,使用該註解的目的是,註解在Configuration bean上,在其載入之前對指定資源進行校驗,是否存在,如果不存在,丟擲異常;該註解支援傳入多個變數,但
springboot啟動讀取外部配置檔案
springboot啟動讀取外部配置檔案 有時候專案打包成一個jar 或者war ,通過java -jar 命令執行springboot 專案,因為springboot 專案有自己的application.properties 配置檔案,但是我們打完包之後,它也會打到包裡邊,倒是也能開啟壓縮包修
SpringBoot 打包為war包啟動時匯入外部配置檔案
最近在做一個SpirngBoot的專案,要求伺服器部署的時候使用tomcat啟動war包的時候需要匯入一個指定位置的application.properties檔案。在網上查找了相關的問題之後,發現大部分都是基於jar包的,同樣的方法war包下並不適用。 後來
Spring配置檔案中如何使用外部配置檔案配置資料庫連線
版權宣告:本文為博主原創文章,歡迎指正或者轉載。 https://blog.csdn.net/qq_38663729/article/details/78821258 直接在spring的配置檔案中applicationContext.xml檔案中配置資料庫連線也可以,但是有個問題,需要在url
maven+IDEA+jar包讀取外部配置檔案
1、工程結構如下 src是jar的原始碼路徑,如果jar要讀取和它同一級目錄下的conf資料夾下的配置檔案就在src同一級目錄下建立一個conf資料夾 裡面放上配置檔案就可以了 2、測試程式碼如下
springboot專案靈活化配置檔案的各種ip埠
事件起源,公司的測試每次打包都需要開發幫忙打包,然而每次打包呢,開發這邊都得把mysql的ip,memcached的ip等各種ip先修改成測試想要的再打包,這樣肯定麻煩啊。後來測試就想能不能把這調整一下,省的麻煩。後來,當然是靈感一閃啦...... 我想著就是把各個寫死的ip,用一個公共變數替代
SpringBoot學習_配置檔案的載入位置
spring boot 啟動會掃描以下位置的application.properties或者 application.yml檔案作為Spring boot的預設配置檔案 file:./config/:檔案路徑下的config資料夾 file:./:檔案路徑下 clas
SpringBoot學習_配置檔案佔位符
文章目錄 隨機數 佔位符獲取之前配置的值,如果沒有可以用:指定預設值 隨機數 ${random.value}、${random.int}、${random.long} ${random.int(10)}、${random.
springboot三種配置檔案上傳下載大小的配置
配置檔案為application.yml格式: spring: http: multipart: enabled: true max-file-size: 30MB max-request-size: 30MB第二種: package com.haiyiso
從SpringBoot原始碼分析 配置檔案的載入原理和優先順序
從SpringBoot原始碼分析 配置檔案的載入原理和優先順序 本文從SpringBoot原始碼分析 配置檔案的載入原理和配置檔案的優先順序 跟入原始碼之前,先提一個問題: SpringBoot 既可以載入指定目錄下的配置檔案獲取配置項,也可
java w3c解析xml檔案,獲取指定節點內容,讀取外部配置檔案。
原始碼: package com.ys.adage.utils; import com.ys.adage.message.CodeObjectResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.
Sprng Boot專案如何讀取外部配置檔案
springboot啟動讀取外部配置檔案 有時候專案打包成一個jar 或者war ,通過java -jar 命令執行springboot 專案,因為springboot 專案有自己的application.properties 配置檔案,但是我們打完包之後,它也會打到包裡邊,倒是也能開啟壓縮包修
用maven按環境打包SpringBoot的不同配置檔案
利用maven按環境打包SpringBoot的不同配置檔案 一個應用系統需要在不同的階段以不同的配置檔案來進行部署,在開發階段需要開發時的配置檔案啟動服務,測試階段或者生產階段都是不同的配置,所以我們需要利用maven按照環境來將不同環境的配置檔案按環境打包,減少我們的維護成本。 1、在pom檔案中進行如
springboot打包與配置檔案外接
目標: 1.將普通的MAVEN JAVA工程打包成SpringBoot可執行的jar包 2.將application.yml和log4j2.xml 1.打包 SpringBoot專案打包要求將依賴的jar全部打進去,因為SpringBoot的自動配置需要用到裡面的spring.
springboot 獲取外部配置
獲取外部配置 Properties properties=new Properties() //xx.properties 絕對路徑獲取 properties.load(new FileInputStream(new File("xx.properties"))); //獲取配置 properti
spring原始碼分析(二):外部配置檔案的載入
@PropertySource 和@Profile 簡介: @PropertySource:用在類上,載入一個(*.properties)的配置檔案 @Profile:用在類或者方法上,指定元件在哪個環境的情況下才能被註冊到容器中,不指定,任何環境下都能註冊這個元件 使用案例1-
SpringBoot的yml配置檔案
1、在src\main\resources下建立application.yml配置檔案 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/t
springboot application.properties配置檔案
application.properties #xml對映檔案路徑配置 mybatis.mapper-locations=classpath:F:com/amu/springboot/mapper/*.xml #自定義埠號 server.port=8081 #開啟日誌 d
springboot如何取配置檔案裡的值@value()
spring boot 中如何取的配置檔案application.properties中值 常用的方法有兩種: application.properties檔案: server.prot:8083 [email protected]()方法獲取