1. 程式人生 > >spring boot 實現不同環境變數下讀取不同的配置檔案

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  檔案,

這樣重啟java就可以實現呼叫 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程式就可以看到生成的日誌檔名稱變了。

 

寫在後面:遺憾的是老大說不推薦這種方式,其實這種方式還是有很多好處的,配置簡單,然後可以解決現在在測試的過程中伺服器不夠用,或者使用衝突的問題,還有就是測試資料同步方便了許多。