如何在spring中使用web.xml中的环境变量?

时间:2016-02-23 22:09:25

标签: java spring spring-mvc

我希望能够在web.xml中引用环境变量,类似于:

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:conf/log4j-${SERVER_ENVIRONMENT}.properties</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4j2ConfigListener</listener-class>
</listener>
<param-value>classpath:conf/log4j-​${SERVER_ENVIRONMENT}​.properties</param-value>

This问题与我的问题类似,最受欢迎的答案声称:

  

如果您使用的是Spring,则可以创建一个bean,然后在Spring XML配置文件中直接使用envvars或sysprops。

但是,我不明白该怎么做。我添加了这个bean:

<context:property-placeholder />
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="serverEnvironment" value="${SERVER_ENVIRONMENT}"></property>
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

但我不知道我是否正确行事,也不知道如何从web.xml访问该变量。我该如何定义该bean,以及如何在web.xml中使用它的值?

1 个答案:

答案 0 :(得分:0)

如果您愿意放弃使用XML配置而不支持Java配置,那么在那里引用环境变量非常容易。只需在配置类中使用@Autowire Environment,就可以执行类似

的操作
@Autowired
Environment environment;

@Bean
public String getServerEnvironment(){
   return this.environment.getProperty("SERVER_ENVIRONMENT");
}

然后只需调用你的bean就可以了。这假定该属性存在于您的环境中,或者您已在运行时使用-DSERVER_ENVIRONMENT传递该属性。

或者你可以使用Spring的@Profile注释并使用它来使你的日志环境依赖(也有几个教程)。

顺便说一句,Spring Boot使这个过程变得更加容易。