SpringBoot之如何指定配置文件啟動
一、問題描述
上周不是搭了個SpringBoot整合sharding-jdbc分庫分表的架子么,組里老哥不讓我把開發(fā)環(huán)境的配置文件放到resource根目錄下。
要放到類似config/local/dev目錄下。
如下圖:
解決該問題時還是遇到了一些問題的,記錄如下。
二、 SpringBoot如何指定配置文件啟動
SpringBoot項目可以配置多個配置文件,項目在不同的環(huán)境運行時可以指定其對應(yīng)的配置文件。
現(xiàn)以dev、beta兩個環(huán)境為例,具體步驟如下:
1、pom.xml中配置
在項目的根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是新建項目時就有的。
2、配置配置文件
2.1、配置application.properties
根application.properties配置文件中可以配置所有環(huán)境共用的一些配置,其配置如下:
其中spring.profiles.active
是指定使用哪個配置文件,@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、驗證
3.1指定beta配置文件啟動
若指定beta配置文件啟動,則服務(wù)端口應(yīng)該是8082。
選擇beta啟動。
查看日志,服務(wù)確實啟用了8082端口,說明使用的是application-beta.properties配置文件。
3.2指定dev配置文件啟動
若指定dev配置文件啟動,則服務(wù)端口應(yīng)該是8083。
選擇dev啟動。
查看日志,服務(wù)確實啟用了8083端口,說明使用的是application-dev.properties配置文件。
三、分析問題
好了,現(xiàn)在該解決剛開始的問題了。但是該問題還真不能完全只通過二中描述的方式解決??梢栽囅?,其他配置不變,把application-dev.properties
放到classpath:config/local/dev
目錄下,啟動項目。
查看日志,服務(wù)啟用的是8080端口,說明application-dev.properties配置文件沒有生效。
為啥沒生效呢?
因為SpringBoot項目的配置文件默認(rèn)情況下只有放在以下四個位置才生效。
- 項目根目錄
- 項目根目錄/config目錄
- resources目錄
- resources/config
且優(yōu)先級是:2>1>4>3。
那么如何使除上面四個位置下的指定位置的配置文件生效呢?具體操作如下。
四、解決問題
4.1、修改pom.xml文件
pom.xml文件添加如下配置,指定配置文件所在路徑。
4.2、 修改根配置文件
根配置文件中獲取maven變量config.path。
4.3、配置類
配置配置類并指定外部配置文件,指定項目啟動時加載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 { }
啟動項目測試下效果,可以看到config/local/dev下的配置文件生效了。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- springboot控制層傳遞參數(shù)為非必填值的操作
- springboot websocket集群(stomp協(xié)議)連接時候傳遞參數(shù)
- Spring Boot/VUE中路由傳遞參數(shù)的實現(xiàn)代碼
- Spring?Boot獲取resources目錄下的文件三種方式詳解
- Springboot中com.mysql.cj.jdbc.Driver在yml文件中爆紅的原因解讀
- springboot實現(xiàn)jar運行復(fù)制resources文件到指定的目錄(思路詳解)
- springboot項目中引入本地依賴jar包并打包到lib文件夾中
- spring boot項目同時傳遞參數(shù)和文件的多種方式代碼演示
相關(guān)文章
使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗分享
這篇文章主要介紹了使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗分享,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解
這篇文章主要介紹了SpringCloud搭建netflix-eureka微服務(wù)集群的過程詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04SpringBoot實現(xiàn)redis延遲隊列的示例代碼
延時隊列場景在我們?nèi)粘I(yè)務(wù)開發(fā)中經(jīng)常遇到,它是一種特殊類型的消息隊列,本文就來介紹一下SpringBoot實現(xiàn)redis延遲隊列的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-02-02Spring?Boot中的過濾器攔截器監(jiān)聽器使用技巧匯總
本文將介紹在Spring?Boot應(yīng)用程序中使用過濾器、攔截器和監(jiān)聽器的使用技巧,我們將討論它們之間的區(qū)別,以及何時使用它們,我們還將提供代碼示例,以幫助您在自己的應(yīng)用程序中使用它們2023-12-12