我想使用application.properties文件设置配置文件,条目为:
mode=master
如何在我的context.xml文件中设置spring.profiles.active? init-param仅适用于web.xml上下文。
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>"${mode}"</param-value>
</init-param>
答案 0 :(得分:8)
有几种方法可以更改活动配置文件,其中任何一种都不直接来自属性文件。
<init-param>
。 -Dspring.profiles.active="master"
ConfigurableEnvironment
ApplicationContext
和setActiveProfiles(String...)
获取context.getEnvironment().setActiveProfiles("container");
您可以使用ApplicationListener
来监听上下文初始化。关于如何做到这一点的解释here。您可以使用ContextStartedEvent
ContextStartedEvent event = ...; // from method argument
ConfigurableEnvironment env = (ConfigurableEnvironment) event.getApplicationContext().getEnvironment();
env.setActiveProfiles("master");
您可以根据需要从属性文件中获取值"master"
。
答案 1 :(得分:3)
您可以使用环境变量,系统变量(JVM或应用程序的-D选项)或将其放入JNDI(java:comp / env /。但是您不能将它放在属性文件中,因为它需要在读取特定属性文件之前。
@Profile javadocs中有更多信息。
另一个解决方案是创建自己的ApplicationContextInitializer实现,该实现读取特定文件并激活给定的配置文件。
答案 2 :(得分:0)
您还可以通过System.setProperty
间接实现此目标:
// spring.profiles file: profile1,profile2
String anotherProfiles = Files.readString(Path.of("spring.profiles")); // or any other file
// Even some logic can be applied here to anotherProfiles
System.setProperty("spring.profiles.include", "dev," + anotherProfiles)
可以稍微重写一下此示例以读取您的application.properties
文件并为Spring获取指定的配置文件。