我有以下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
,以明确使用测试配置文件。
根据文档,它应覆盖我的属性文件中的dev
值
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
。
答案 0 :(得分:1)
不幸的是,你想做的事情是不可能的。配置文件只能从命令行激活,或者在某些情况下可以从settings.xml
激活。见this answer。 This 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>