application.yml 与 bootstrap.yml使用不当造成的 profile 动态传参失败

在application.yml 文件中做如下定义

spring:
  profiles:
    active: '@profileName@'

maven pom.xml 中增加以下几个可供选择的profileName 的定义

<profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <profileName>dev</profileName>
            </properties>
        </profile>

        <profile>
            <id>sit</id>
            <properties>
                <profileName>sit</profileName>
            </properties>
        </profile>
        <profile>
            <id>uat</id>
            <properties>
                <profileName>uat</profileName>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profileName>prod</profileName>
            </properties>
        </profile>
    </profiles>

在执行打包命令的时候把动态的profileName 传入,得到不同环境下的jar

mvn clean compile package -P dev -Dmaven.test.skip=true

正常情况下,以上配置就可以正常使用动态profile了,但是我的项目里没有application.yml只有 bootstrap.yml
bootstrap.yml 的加载顺序在 application.yml 之前,属于系统参数配置
但是

spring:
	profiles:
		active: '@profileName@'

属于应用级别的参数
系统启动时需要先加载系统参数配置,再加载应用参数配置
我把参数配置都写在 bootstrap.yml 中,系统就无法动态加载应用参数了,导致‘profileName’ 无法被动态参数替换

建议
系统参数(比如项目启动过程中需要的参数)配置在 bootstrap.yml 中
应用参数(比如 spring.profile ,server.port 等)配置在application.yml 中

你可能感兴趣的:(application.yml 与 bootstrap.yml使用不当造成的 profile 动态传参失败)