本文章是上一篇文章《SpringBoot Profiles实现多环境下配置切换》的升华。到底有什么不一样呢?上一篇文章中,切换环境是在启动程序的时候,添加参数--spring.profiles.active实现,如下:
java -jar xxx.jar --spring.profiles.active=test 表示使用测试环境的配置
那么根据本篇文章,可以实现,在Maven打包的时候,只打包指定环境的配置,最终实现的效果如下:
打包发布:
当然也可以勾选环境之后,通过IDE插件运行程序:
通过上图可以看出,切换环境,非常简单。
实现思路简述:
Maven支持Profile功能,当使用Maven Profile打包时,可以打包指定目录和指定文件,spring boot也支持profile功能,只要在application.properties文件中指定spring.profiles.active=xxx 即可,其中xxx是一个变量,当在勾选Maven Projects的Profiles的时候,自动触发使用pom.xml的变量值替换掉properties文件中的spring.profiles.active=xxx的变量值即可。
下面就通过demo来讲解,该demo中,只有开发(dev)、测试(test)、生产(prod)三个环境:
对应的是application-dev.properties、application-test.properties和application-prod.properties。
文件的存放如下
application-dev.properties
#开发环境dev加载的配置文件
spring.profiles=dev
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=ORACLE
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
logging.config=classpath:log4j2-dev.xml
application-test.properties
#测试环境test加载的配置文件
spring.profiles=test
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=ORACLE
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
logging.config=classpath:log4j2-test.xml
application-prod.properties
#生产环境prod加载的配置文件
spring.profiles=prod
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=ORACLE
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
logging.config=classpath:log4j2-prod.xml
由于只是个例子,所以三个环境配置的数据源都是同一个,当然在大部分的企业应用中,都是配置不同的数据源。
dev
dev
true
test
test
prod
prod
3.1 定义properties文件变量的分隔符(标识符)
修改pom.xml,添加如下配置
maven-resources-plugin
${*}
@
3.2 application.properties添加spring.profiles.active属性,属性值为变量,变量值由pom.xml的propfiles的properties属性提供
#-------------------------通用配置,程序启动默认加载,并根据不同的环境(开发、测试、生产)还会加载特定环境下的配置文件--------------
server.port=8081
#配置项目启动的时候,决定使用哪个环境,开发(dev)、测试(test)还是产品(prod)环境
spring.profiles.active=${active.profile}
3.3 通过resources实现只打包特定环境的配置文件,以及使用Maven Profiles自动切换Spring Boot的环境配置
src/main/resources
true
src/main/profiles
**/application-${active.profile}.properties
**/log4j2-${active.profile}.xml
true
...