# 多Profile文件

在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

默认使用application.properties的配置

如果application.yml中的配置和application-{profile}.yml相冲突时,application.yml中的配置会被覆盖掉。

# yml支持多文档块方式

server:
  port: 8081
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev

---

server:
  port: 8084
spring:
  profiles: prod  #指定属于哪个环境

# 激活指定profile

1、在配置文件中指定 spring.profiles.active=dev

2、命令行:

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

java -Xms2048m -Xmx2048m -jar xxx.jar --server.port=8088

可以直接在测试的时候,配置传入命令行参数

3、虚拟机参数;

-Dspring.profiles.active=dev

注意

参数的位置在命令行的位置

如果是在 app.jar 之前,加-Dxx=yy,如果是之后,则为--xx=yy

例如:

java -jar xxx.jar --server.port=8088
java -Dserver.port=8088 -jar xxx.jar

# maven

maven 在 pom.xml 中定义变量,然后在配置文件中引用的方式来指定 profile

spring:
  profiles:
    active: @spring.profiles.active@

如果想要获取mvn中设置的属性变量,需要使用@mvn变量名@(该方式为mvn的默认filter方式,如果想要更改方式,可以配置自定义filter),不能使用${mvn变量名},否则无法获取到

# 总结

  1. 如果是有maven定义运行参数,格式为@xxx@,必须在pom.xmlproperties中定义,否则不能启动

  2. Environment variables可以通过spring.profiles.active=prod这个样的格式定义

  3. VM options使用 -Dspring.profiles.active=prod的格式来声明

  4. 顺序为

    @xxx@ < env(spring.profiles.active=prod) < VM(-Dspring.profiles.active=prod)
    
  5. 外部定义变量,在application.yml中使用 ${spring.profiles.active} 的格式来读取

多种方式任意选择