从Windows系统变量激活Maven配置文件无法正常工作

时间:2018-02-08 19:47:44

标签: java spring maven spring-boot

我有以下maven配置文件配置

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <property>
                <name>spring.profiles.active</name>
                <value>dev</value>
            </property>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <activation>
            <property>
                <name>spring.profiles.active</name>
                <value>test</value>
            </property>
        </activation>
    </profile>
</profiles>


我在application.properties

中有这个
spring.profiles.active=dev

所以dev是弹簧和maven配置文件的默认设置。

然后,我将Windows系统变量SPRING_PROFILES_ACTIVE设置为值test,以明确使用测试配置文件。
enter image description here

根据文档,它应覆盖我的属性文件中的dev

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

  

69.5设置活动弹簧配置文件

     

Spring Environment有一个API,但通常你会设置   System属性(spring.profiles.active)或OS环境   变量(SPRING_PROFILES_ACTIVE)。例如。用a启动你的应用程序   -D参数(记得把它放在主类或jar存档之前):

     

$ java -jar -Dspring.profiles.active = production   演示0.0.1-SNAPSHOT.jar

     

在Spring Boot中,您还可以设置活动配置文件   application.properties,例如

     

spring.profiles.active =生产

     

以这种方式设置的值将替换为System属性或环境   变量设置,但不是SpringApplicationBuilder.profiles()   方法。因此,后一个Java API可用于扩充配置文件   不改变默认值。

     

请参阅第25章,“Spring Boot功能”部分中的配置文件   更多信息。

现在,当我运行Spring应用程序时,它正在使用Spring中的test配置文件,但是maven配置文件激活没有接收到这一点,并且仍在使用dev配置文件。

我尝试将SPRING_PROFILES_ACTIVE设置为<property>元素中的名称,以确保它不是小写.版本和大写_版本的问题但这没有帮助。

当我使用-Dspring.profiles.active=test运行maven时,如果我提供变量,它会起作用。

非常感谢任何帮助。

编辑:显然,当我向catalina.properties包含spring.profiles.active=test {tom}的tomcat部署战争时,这也无效。同样的事情,Spring使用test,但Maven仍然停留在dev

2 个答案:

答案 0 :(得分:1)

不幸的是,你想做的事情是不可能的。配置文件只能从命令行激活,或者在某些情况下可以从settings.xml激活。见this answerThis one包括与JIRA讨论挑战的问题以及其他人试图使其发挥作用的链接。

系统属性在command line上设置。

答案 1 :(得分:0)

如何使用环境变量激活配置文件?

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <property>
                <name>spring.profiles.active</name>
                <value>dev</value>
            </property>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <activation>
            <property>
                <name>env.SPRING_PROFILES_ACTIVE</name>
                <value>test</value>
            </property>
        </activation>
    </profile>
</profiles>