Java 从windows系统变量激活Maven配置文件无效

Java 从windows系统变量激活Maven配置文件无效,java,spring,maven,spring-boot,Java,Spring,Maven,Spring Boot,我有以下maven配置文件配置 <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> <property> <name>spring.profiles.

我有以下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>
因此,
dev
是spring和maven配置文件的默认设置

然后,我将Windows系统变量
SPRING\u PROFILES\u ACTIVE
设置为
test
,以明确使用测试配置文件。

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

69.5设置活动弹簧外形

Spring环境对此有一个API,但通常您会设置 系统属性(spring.profiles.active)或操作系统环境 变量(弹簧配置文件处于活动状态)。例如,使用 -D参数(请记住将其放在主类或jar归档之前):

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

在Spring Boot中,您还可以在中设置活动配置文件 应用程序、属性,例如

spring.profiles.active=生产

以这种方式设置的值将被系统属性或环境替换 变量设置,但不是由SpringApplicationBuilder.profiles()设置的 方法因此,可以使用后一个JavaAPI来扩充概要文件 不更改默认值

有关详细信息,请参阅第25章“Spring Boot功能”一节中的配置文件 更多信息

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

我已尝试将
SPRING\u PROFILES\u ACTIVE
设置为
元素中的名称,以确保小写的
版本和大写的
版本没有问题,但这没有帮助

如果我在运行maven时使用
-Dspring.profiles.active=test
提供变量,它确实可以工作

非常感谢您的帮助


edit:显然,当我将war部署到tomcat时,这也不起作用,其中
catalina.properties
包含
spring.profiles.active=test
。同样,Spring使用了
test
,但是Maven仍然停留在
dev

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


系统属性是在上设置的。

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

<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>

发展
符合事实的
spring.profiles.active
发展
测验
env.SPRING\u配置文件\u活动
测验

但是在文档中它说它可以使用系统属性
配置文件可以根据检测到的构建环境状态自动触发。。。。。。目前,此检测仅限于JDK版本的前缀匹配、系统属性的存在或系统属性的值。
激活配置文件的属性可能来自
settings.xml
和命令行,而不是来自应用程序中的文件。在answer上展开。maven配置文件使用-P激活,就像我们使用-D注入环境变量一样。命令类似:
mvn clean install-Pdev
,它激活了
dev
maven配置文件,而maven配置文件又反过来激活了
dev
spring配置文件。@YogenRai我正在寻找一个解决方案,该解决方案将激活spring配置文件设置为aven controls spring的配置文件的相应maven配置文件。。idk,如果这是可以实现的。。但好的目标是:)
<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>