在Spring Boot中多环境配置文件名需要满足application-{profiles.active}.properties的格式,其中{profiles.active}对应你的环境标识,可以随意命名,但要与pom文件中环境标识一样。
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
</properties>
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
在application.properties里面添加:
#标识环境
[email protected]@
在Spring Boot中多环境配置文件名需要满足application-{profiles.active}.properties的格式,其中{profiles.active}对应你的环境标识。
目录结构如下图:
当spring.profiles.active=prod就会加载application-prod.properties配置文件内容 :
里面添加与环境相关的参数、数据源等,根据不同的环境添加不同的参数(已修改tomcat端口号为例)。
在pom中添加如下信息:
在resources里面加入:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>application.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources/env</directory>
<filtering>true</filtering>
<includes>
<include>application-${profiles.active}.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
在build参数里面加入:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
加入profiles参数:
<profiles>
<profile>
<id>dev</id>
<activation>
<!-- 默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
使用idea工具打包(如下图):
打包的过程中会在控制台打印出打包的环境:
测试结果,使用prod里配置tomcat端口:
到此,不同的环境已经搭建好,下面引入日志。
在不同的环境中配置不同的日志,例如:在application-prod.properties 中加入
#logging
logging.config=classpath:logs/logback-prod.xml
表示引用的是logs文件下的logback-prod.xml。
其中logback-prod.xml信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 不分级别同步文件日志输出配置 -->
<configuration>
<!-- 日志级别 -->
<property name="logLevel" value="INFO"></property>
<!-- 日志地址 -->
<property name="logPath" value="./logs"></property>
<!-- 最大保存时间 -->
<property name="maxHistory" value="10"/>
<!-- 异步缓冲队列的深度,该值会影响性能.默认值为256 -->
<property name="queueSize" value="512"></property>
<!-- 控制台打印日志的相关配置 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<!-- 文件保存日志的相关配置,同步 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 保存日志文件的路径 -->
<file>${logPath}/devLog.log</file>
<!-- 日志格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${logLevel}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${logPath}/cms-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最大保存时间-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
</appender>
<!--配置mybatis sql 日志-->
<logger name="com.mdh.mapper" level="DEBUG"/>
<!-- 基于INFO处理日志:具体控制台或者文件对日志级别的处理还要看所在appender配置的filter,如果没有配置filter,则使用root配置 -->
<root level="${logLevel}">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
logback-prod.xml信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 不分级别同步文件日志输出配置 -->
<configuration>
<!-- 日志级别 -->
<property name="logLevel" value="INFO"></property>
<!-- 日志地址 -->
<property name="logPath" value="./logs"></property>
<!-- 最大保存时间 -->
<property name="maxHistory" value="10"/>
<!-- 异步缓冲队列的深度,该值会影响性能.默认值为256 -->
<property name="queueSize" value="512"></property>
<!-- 控制台打印日志的相关配置 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<!-- 文件保存日志的相关配置,同步 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 保存日志文件的路径 -->
<file>${logPath}/devLog.log</file>
<!-- 日志格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${logLevel}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${logPath}/cms-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最大保存时间-->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
</appender>
<!--配置mybatis sql 日志-->
<logger name="com.mdh.mapper" level="DEBUG"/>
<!-- 基于INFO处理日志:具体控制台或者文件对日志级别的处理还要看所在appender配置的filter,如果没有配置filter,则使用root配置 -->
<root level="${logLevel}">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
结果如下(分别运行了不同环境下面的日志):
ok,所有的工作都完成了。(第一次写,总感觉不完善,如有看不懂的可以提出,欢迎一起探讨,qq:752228071)