5

我想使用带有条目的 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>
4

3 回答 3

8

有几种方法可以更改活动配置文件,但都不是直接从属性文件中获取的。

  • 您可以<init-param>像在问题中那样使用。
  • 您可以在应用程序启动时提供系统参数 -Dspring.profiles.active="master"
  • 您可以ConfigurableEnvironment从您的ApplicationContextsetActiveProfiles(String...)以编程方式获取context.getEnvironment().setActiveProfiles("container");

您可以使用 anApplicationListener来监听上下文初始化。有关如何在此处执行此操作的说明。你可以使用一个ContextStartedEvent

ContextStartedEvent event = ...; // from method argument
ConfigurableEnvironment env = (ConfigurableEnvironment) event.getApplicationContext().getEnvironment();
env.setActiveProfiles("master");

您可以根据"master"需要从属性文件中获取值。

于 2013-09-04T13:39:13.490 回答
3

您可以使用环境变量、系统变量(JVM 或应用程序的 -D 选项)或将其放入 JNDI(java:comp/env/。但是您不能将其放入属性文件中,因为在此之前需要它读取特定的属性文件。

@Profile javadocs中有更多信息。

另一种解决方案是创建您自己的ApplicationContextInitializer实现,该实现读取某个文件并激活给定的配置文件。

于 2013-09-04T13:31:41.367 回答
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 获取指定的配置文件。

于 2019-10-16T14:43:45.777 回答