如何通过属性文件而不是通过env变量或系统属性设置活动的spring 3.1环境配置文件

我们使用spring 3.1的新环境配置文件特性。我们当前通过在我们部署应用程序的服务器上设置环境变量spring.profiles.active = xxxxx来设置活动配置文件。

我们认为这是一个次优解决方案,因为我们要部署的war文件应该只有一个附加的属性文件,该文件设置spring应用程序上下文应该加载的环境,以便部署不依赖于服务器上的一些env var集合。

我试图找出如何做到这一点,发现:

ConfigurableEnvironment.setActiveProfiles()

其中我可以使用以编程方式设置配置文件,但我仍然不知道在哪里和何时执行此代码。弹簧环境加载在哪里?我可以从属性文件加载我想传递给方法的参数吗?

更新:我刚刚发现在docs,我可能能够实现设置活动配置文件?

最佳答案
在web.xml中

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>profileName</param-value>
</context-param>

使用WebApplicationInitializer

当您在Servlet 3.0环境中没有web.xml文件并且正在从Java完全引导Spring时使用此方法:

class SpringInitializer extends WebApplicationInitializer {

    void onStartup(ServletContext container) {
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.getEnvironment().setActiveProfiles("profileName");
        rootContext.register(SpringConfiguration.class);
        container.addListener(new ContextLoaderListener(rootContext));
    }
}

其中SpringConfiguration类用@Configuration注释。

转载注明原文:如何通过属性文件而不是通过env变量或系统属性设置活动的spring 3.1环境配置文件 - 代码日志