前言
- spring boot version : 2.0.0.RELEASE
- maven version : 3.5.0
在不同的环境下,依赖的外部资源是不一样的。比如,在windows上开发,在linux下进行测试时,无法将开发环境和测试i环境构造成一致的。
此时,就需要两个配置文件来解决此事。开发环境一个配置文件,测试环境一个配置文件。
方式1
使用 --spring.profiles.active=xxx。
- 步骤1:
先为开发环境和测试环境分别编写配置文件,配置文件中保留不同之处。开发环境配置文件为:application-dev.properties;测试环境配置文件为:application-test.properties。
再将开发环境和测试环境中,相同的配置放到同一个配置文件(application.properties)中。 - 步骤2:
启动时,使用 --spring.profiles.active=xxx,指定不同的profile。
开发环境启动时,在命令行参数中提供spring.profiles.active=dev。例:mvn spring-boot:run -Dspring.profiles.active=dev
测试环境启动时,在命令行参数中提供spring.profiles.active=test。例:mvn spring-boot:run -Dspring.profiles.active=test
说明
java 命令启动时,–spring.profiles.active=dev,前面的“–”很重要。
mvn 命令启动时,-Dspring.profiles.active=dev,前面的“-D”很重要。
spring.profiles.active=dev 时,配置文件匹配顺序:application-dev.properties、application.properties。如果application-dev.properties中有的配置,则会以application-dev.properties的配置为准。如果application-dev.properties中没有的配置,则会以application.properties的配置为准。(配置文件加载顺序详见官方文档:24. Externalized Configuration)
方式2
使用 --spring.config.name=xxx。
- 步骤1:
先为开发环境和测试环境分别编写配置文件,配置文件中保留不同之处。开发环境配置文件为:application-dev.properties;测试环境配置文件为:application-test.properties。 - 步骤2:
启动时,使用 --spring.config.name=xxx,指定配置文件名。
开发环境启动时,在命令行参数中提供spring.config.name=application-dev。例:mvn spring-boot:run -Dspring.config.name=application-dev
测试环境启动时,在命令行参数中提供spring.config.name=application-test。例:mvn spring-boot:run -Dspring.config.name=application-test
说明
java 命令启动时,–spring.profiles.active=application-dev,前面的“–”很重要。
mvn 命令启动时,-Dspring.profiles.active=application-dev,前面的“-D”很重要。
–spring.config.name=application-dev 时,配置文件匹配顺序:application-dev.properties。如果application-dev.properties中有的配置,则会以application-dev.properties的配置为准。如果application-dev.properties中没有的配置,则为null。(配置文件加载顺序详见官方文档:24. Externalized Configuration)
方式3
使用 --spring.config.location=xxx。
同 --spring.config.name=xxx类似。但是,–spring.config.location=xxx可以连配置文件路径一起修改,也可以指定多个配置文件。(配置文件加载顺序详见官方文档:24. Externalized Configuration)
例:mvn spring-boot:run -Dspring.config.location=classpath:/config/application-test2.properties,classpath:application-test1.properties
说明
指定多个配置文件时,后给出的配置文件覆盖先给出的配置文件。
如果application-test1.properties中有的配置,则会以application-test1.properties的配置为准。如果application-test1.properties中没有的配置,但application-test2.properties中有的配置,则会以application-test2.properties的配置为准。如果application-test1.properties和application-test2.properties中都没有的配置,则为null。