背景
有三个配置文件(.properties文件和.yml文件一样道理嘛),分别是:
application.properties(默认配置)文件内容:server.port=8080
application-dev.properties(开发环境)文件:server.port=8082
application-prod.properties(生产环境)文件:server.port=8081
方式一、使用Springboot自带profile管理功能(点我直达)
方式二、使用maven+springboot的功能实现
特别说明,该方式可以实现只打包指定的配置文件,多余的配置文件不会被打包。
步骤:
1、在application.properties中增加属性:
spring.profiles.active=@activatedProperties@
修改后的 application.properties
spring.profiles.active=@activatedProperties@
server.port=8080
2、因为要使用maven的功能,所以我们需要修改pom.xml文件,修改后的pom.xml内容(摘要了profiles和resources)
<!--多环境配置用maven+profile来实现-->
<profiles>
<profile>
<id>prod</id>
<properties>
<activatedProperties>prod</activatedProperties>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<!-- 这套配置设为默认激活 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--filtering代表变量替换,如果不设置filtering=true,
那么application.properties中的@activatedProperties@就不会被替换-->
<filtering>true</filtering>
</resource>
</resources>
<!--如果需要排除多余的配置文件,可以加入如下配置,并且删除上面的<resources>节点
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/application-*.*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application-${activatedProperties}.*</include>
</includes>
</resource>
</resources>
-->
</build>
3、在IDE中运行时如何指定配置文件
在Active profiles中设置相应的配置即可:
设置为dev,表示使用application.properties + application-dev.properties
设置为prod,表示使用application.properties + application-prod.properties
如果application.properties和application-dev.properties中有重复的配置(比如我这里都配置了server.port),application-dev.properties中的配置会覆盖掉application.properties得配置,比如我在IDE中指定使用dev配置文件运行时的结果:
4、打包,打包相应的配置文件
#注意,这里打包的话,我们就需要指定-P参数
#将application-dev.properties打包
mvn clean package -Dmaven.test.skip=true -Pdev
#将application-prod.properties打包
mvn clean package -Dmaven.test.skip=true -Pprod
打包之后的application.properties中的@activatedProperties@就会被替换为相应的prod或者是dev
运行的时候直接使用:
java -jar .\springboot-study-0.0.1-SNAPSHOT.jar
当然,运行的时候就不能动态指定配置文件了,因为打包的时候就确定了,而且application.properties中的@activatedProperties@已经被替换成了prod或者dev。
5、额外说明:
如果不需要打包其他多余配置文件(此时需要解除pom.xml中resources中的注释),那么打包之后,包里面就只有相应的配置文件了,比如指定了dev,那么相应的prod文件就不会被打包
pom.xml的resources摘要(注意,这是整个resources节点的摘要):
<resources>
<!--先不要application-prod.properties和application-dev.properties文件-->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/application-*.*</exclude>
</excludes>
</resource>
<!--加入相应的application-prod.properties或application-dev.properties文件
并且执行变量替换-->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application-${activatedProperties}.*</include>
</includes>
</resource>
</resources>
执行打包命令:
mvn clean package -Dmaven.test.skip=true -Pdev
打包之后的jar包文件如下,就只有application.properties 和 application-dev.properties