有三个配置文件(.properties文件和.yml文件一样道理嘛),分别是:
application.properties(默认配置)文件内容:server.port=8080
application-dev.properties(开发环境)文件:server.port=8082
application-prod.properties(生产环境)文件:server.port=8081
特别说明,该方式可以实现只打包指定的配置文件,多余的配置文件不会被打包。
步骤:
1、在application.properties中增加属性:
spring.profiles.active=@activatedProperties@
修改后的 application.properties
spring.profiles.active=@activatedProperties@
server.port=8080
2、因为要使用maven的功能,所以我们需要修改pom.xml文件,修改后的pom.xml内容(摘要了profiles和resources)
prod
prod
dev
dev
true
org.springframework.boot
spring-boot-maven-plugin
src/main/resources
true
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节点的摘要):
src/main/resources
**/application-*.*
src/main/resources
true
**/application-${activatedProperties}.*
执行打包命令:
mvn clean package -Dmaven.test.skip=true -Pdev
打包之后的jar包文件如下,就只有application.properties 和 application-dev.properties