spring boot 實現不同環境變數下讀取不同的配置檔案
首先,這個問題的出現是老大讓我寫一個在spring boot專案中實現不同裝置產生的日誌檔案大小不一樣。網上查了各種資料,還是沒有解決,都是寫了個片段,比如告訴你可以通過在 application.properties檔案中配置這句話來載入自己指定的配置好的日誌配置檔案logging.config=classpath:log4j2-cloud.xml。 但是沒告訴不同的環境變數下該怎麼實現,並且,我是想找一個可以通過java程式碼來實現這個需求,通過先獲取現在程式在哪個環境變數中執行,然後通過java指定要呼叫的日誌配置檔案。最終沒有找到。然後網上不經意看到了可以再 application,properties檔案中配置 spring.profiles.active=dev 這個,然後再在application,.properties檔案的同級目錄下寫一個application-dev.properties 檔案,
下面具體的配置:
1、首先建一個application.properties 檔案裡面的內容如下:
server.port=5566
spring.profiles.active=dev
2、再建一個application-dev.properties檔案,內容如下
server.port=5567 logging.config=classpath:log4j2-dev.xml
3、再建一個log4j2-dev.xml檔案,裡面寫好日誌的配置內容
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Appenders> <!-- 輸出到控制檯 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%l]-%m%n" /> </Console> <Routing name="Routing"> <Routes pattern="$${sd:type}"> <Route> <RollingFile name="RollingFile" fileName="./data/log/qztWebLogpp.log" filePattern="./data/log/qztWebLog-%i.log"> <PatternLayout> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%l]-%m%n</pattern> </PatternLayout> <SizeBasedTriggeringPolicy size="80MB" /> <DefaultRolloverStrategy max="5" /> </RollingFile> </Route> <Route ref="STDOUT" key="Audit" /> <Route ref="List" key="Service" /> </Routes> </Routing> </Appenders> <Loggers> <!-- 全域性配置 --> <Root level="INFO"> <AppenderRef ref="Console" /> <AppenderRef ref="Routing" /> </Root> </Loggers> </Configuration>
5、然後啟動java程式就可以讀取到apploication-dev.xml檔案的內容,並且讀取到 log4j2-cloud.xml 這個配置檔案
二、如果改變了application.properties檔案中的 spring.prifiles.active後面的值則可以再新建 application-{profiles}.properties檔案裡賦值。形如以下
1、首先建一個application.properties 檔案裡面的內容如下:
server.port=5566
spring.profiles.active=pro
2、再建一個application-pro.properties檔案,內容如下:
server.port=5568
logging.config=classpath:log4j2-pro.xml
3、再建一個log4j2-pro.xml檔案,裡面寫好日誌的配置內容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<!-- 輸出到控制檯 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%l]-%m%n" />
</Console>
<Routing name="Routing">
<Routes pattern="$${sd:type}">
<Route>
<RollingFile name="RollingFile" fileName="./data/log/qztWebLogsss.log"
filePattern="./data/log/qztWebLog-%i.log">
<PatternLayout>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%l]-%m%n</pattern>
</PatternLayout>
<SizeBasedTriggeringPolicy size="3MB" />
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Route>
<Route ref="STDOUT" key="Audit" />
<Route ref="List" key="Service" />
</Routes>
</Routing>
</Appenders>
<Loggers>
<!-- 全域性配置 -->
<Root level="INFO">
<AppenderRef ref="Console" />
<AppenderRef ref="Routing" />
</Root>
</Loggers>
</Configuration>
4、重啟java程式就可以看到生成的日誌檔名稱變了。
寫在後面:遺憾的是老大說不推薦這種方式,其實這種方式還是有很多好處的,配置簡單,然後可以解決現在在測試的過程中伺服器不夠用,或者使用衝突的問題,還有就是測試資料同步方便了許多。