spring boot 实现不同环境变量下读取不同的配置文件

版权声明: https://blog.csdn.net/qq_32157851/article/details/82776086

首先,这个问题的出现是老大让我写一个在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程序就可以看到生成的日志文件名称变了。

写在后面:遗憾的是老大说不推荐这种方式,其实这种方式还是有很多好处的,配置简单,然后可以解决现在在测试的过程中服务器不够用,或者使用冲突的问题,还有就是测试数据同步方便了许多。

猜你喜欢

转载自blog.csdn.net/qq_32157851/article/details/82776086