SpringBoot之如何指定配置文件啟動(dòng)
一、問(wèn)題描述
上周不是搭了個(gè)SpringBoot整合sharding-jdbc分庫(kù)分表的架子么,組里老哥不讓我把開發(fā)環(huán)境的配置文件放到resource根目錄下。
要放到類似config/local/dev目錄下。
如下圖:

解決該問(wèn)題時(shí)還是遇到了一些問(wèn)題的,記錄如下。
二、 SpringBoot如何指定配置文件啟動(dòng)
SpringBoot項(xiàng)目可以配置多個(gè)配置文件,項(xiàng)目在不同的環(huán)境運(yùn)行時(shí)可以指定其對(duì)應(yīng)的配置文件。
現(xiàn)以dev、beta兩個(gè)環(huán)境為例,具體步驟如下:
1、pom.xml中配置
在項(xiàng)目的根pom.xml文件中添加以下配置
<profiles>
<!-- dev環(huán)境 -->
<profile>
<id>local-dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<!-- beta環(huán)境 -->
<profile>
<id>local-beta</id>
<properties>
<env>beta</env>
</properties>
</profile>
添加完后可以在右側(cè)Maven Projects->Profiles中看到新加的配置,如下圖:

local-nexus是新建項(xiàng)目時(shí)就有的。
2、配置配置文件
2.1、配置application.properties
根application.properties配置文件中可以配置所有環(huán)境共用的一些配置,其配置如下:

其中spring.profiles.active是指定使用哪個(gè)配置文件,@evn@是使用maven的變量,即取上一步中配置的<env>的值。此處不配置服務(wù)端口,默認(rèn)是8080。
2.2、配置beta環(huán)境的配置文件
文件名為application-XXX.properties。此處XXX必須為1中配置的beta環(huán)境的<env>的值,否則該配置文件不生效。
application-beta.properties是beta環(huán)境的配置文件,配置如下圖。

2.3、配置開發(fā)環(huán)境的配置文件
文件名為application-XXX.properties。此處XXX必須為1中配置的dev環(huán)境的<env>的值,否則該配置文件不生效。
application-dev.properties是dev環(huán)境的配置文件,配置如下圖。

3、驗(yàn)證
3.1指定beta配置文件啟動(dòng)
若指定beta配置文件啟動(dòng),則服務(wù)端口應(yīng)該是8082。
選擇beta啟動(dòng)。

查看日志,服務(wù)確實(shí)啟用了8082端口,說(shuō)明使用的是application-beta.properties配置文件。

3.2指定dev配置文件啟動(dòng)
若指定dev配置文件啟動(dòng),則服務(wù)端口應(yīng)該是8083。
選擇dev啟動(dòng)。

查看日志,服務(wù)確實(shí)啟用了8083端口,說(shuō)明使用的是application-dev.properties配置文件。

三、分析問(wèn)題
好了,現(xiàn)在該解決剛開始的問(wèn)題了。但是該問(wèn)題還真不能完全只通過(guò)二中描述的方式解決??梢栽囅?,其他配置不變,把application-dev.properties放到classpath:config/local/dev目錄下,啟動(dòng)項(xiàng)目。

查看日志,服務(wù)啟用的是8080端口,說(shuō)明application-dev.properties配置文件沒有生效。

為啥沒生效呢?
因?yàn)镾pringBoot項(xiàng)目的配置文件默認(rèn)情況下只有放在以下四個(gè)位置才生效。
- 項(xiàng)目根目錄
- 項(xiàng)目根目錄/config目錄
- resources目錄
- resources/config
且優(yōu)先級(jí)是:2>1>4>3。
那么如何使除上面四個(gè)位置下的指定位置的配置文件生效呢?具體操作如下。
四、解決問(wèn)題
4.1、修改pom.xml文件
pom.xml文件添加如下配置,指定配置文件所在路徑。

4.2、 修改根配置文件
根配置文件中獲取maven變量config.path。

4.3、配置類
配置配置類并指定外部配置文件,指定項(xiàng)目啟動(dòng)時(shí)加載config.path路徑下的配置文件
package com.luffylv.shardingspherespringbootdemo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource(value = "${config.path}/application-dev.properties")
public class EnvLoadConfig {
}
啟動(dòng)項(xiàng)目測(cè)試下效果,可以看到config/local/dev下的配置文件生效了。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- springboot控制層傳遞參數(shù)為非必填值的操作
- springboot websocket集群(stomp協(xié)議)連接時(shí)候傳遞參數(shù)
- Spring Boot/VUE中路由傳遞參數(shù)的實(shí)現(xiàn)代碼
- Spring?Boot獲取resources目錄下的文件三種方式詳解
- Springboot中com.mysql.cj.jdbc.Driver在yml文件中爆紅的原因解讀
- springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄(思路詳解)
- springboot項(xiàng)目中引入本地依賴jar包并打包到lib文件夾中
- spring boot項(xiàng)目同時(shí)傳遞參數(shù)和文件的多種方式代碼演示
相關(guān)文章
JAVA SE包裝類和泛型詳細(xì)介紹及說(shuō)明方法
這篇文章主要介紹了JAVA SE包裝類和泛型的相關(guān)資料,包括基本數(shù)據(jù)類型與包裝類的對(duì)應(yīng)關(guān)系,以及裝箱和拆箱的概念,并重點(diǎn)講解了自動(dòng)裝箱和自動(dòng)拆箱的機(jī)制,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
淺談Spring Data JPA與MyBatisPlus的比較
本文主要介紹了淺談Spring Data JPA 與 MyBatisPlus的比較2024-08-08
JUnit測(cè)試控制@Test執(zhí)行順序的三種方式小結(jié)
這篇文章主要介紹了JUnit測(cè)試控制@Test執(zhí)行順序的三種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
排查Failed?to?validate?connection?com.mysql.cj.jdbc.Connec
這篇文章主要介紹了Failed?to?validate?connection?com.mysql.cj.jdbc.ConnectionImpl問(wèn)題排查,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2023-02-02
java對(duì)象和json的來(lái)回轉(zhuǎn)換知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享了一篇關(guān)于java對(duì)象和json的來(lái)回轉(zhuǎn)換知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
Java實(shí)現(xiàn)短信發(fā)送驗(yàn)證碼功能
這篇文章主要介紹了Java實(shí)現(xiàn)短信發(fā)送驗(yàn)證碼功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-10-10
MyBatis二級(jí)緩存實(shí)現(xiàn)關(guān)聯(lián)刷新
本文主要介紹了MyBatis二級(jí)緩存實(shí)現(xiàn)關(guān)聯(lián)刷新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
Java+OpenCV實(shí)現(xiàn)人臉檢測(cè)并自動(dòng)拍照
這篇文章主要為大家詳細(xì)介紹了Java+OpenCV實(shí)現(xiàn)人臉檢測(cè),并調(diào)用筆記本攝像頭實(shí)時(shí)抓拍,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

