如何在Spring中使用application.properties设置配置文件?

时间:2013-09-04 13:12:49

标签: java spring

我想使用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>

3 个答案:

答案 0 :(得分:8)

有几种方法可以更改活动配置文件,其中任何一种都不直接来自属性文件。

  • 您可以在问题中使用<init-param>
  • 您可以在应用程序启动时提供系统参数 -Dspring.profiles.active="master"
  • 您可以使用ConfigurableEnvironment
  • 以编程方式从ApplicationContextsetActiveProfiles(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获取指定的配置文件。