Spring XML配置无法检索活动配置文件

时间:2016-04-15 08:53:09

标签: spring spring-mvc web.xml spring-profiles

我正在处理的应用程序有一个基于XML的Spring配置(框架版本:4.1.7.RELEASE)。

因为如果指定了配置文件,我想要实例化某些bean,我已将以下内容添加到web.xml

 <servlet>
        <servlet-name>my-app</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
<!-- This part is new -->
        <init-param>
            <param-name>spring.profiles.active</param-name>
            <param-value>${spring.profile}</param-value>
        </init-param>
<!-- End of newly-added part -->
        <load-on-startup>1</load-on-startup>
    </servlet>

spring.profile是Maven pom.xml中设置的属性,基于所选的Maven配置文件:

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>development</spring.profile>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <spring.profile>production</spring.profile>
        </properties>
    </profile>
</profiles>

我在maven-war插件中启用了过滤功能,该插件按预期工作,因为占位符会根据所选的Maven配置文件替换为适当的值。因此,涉及Maven的部分被清除并且工作正常。

但是,当我尝试注入一个Environment实例时,活动配置文件列表为空:

@Autowired private Environment env;
...
log.info(env.getActiveProfiles().toString());

servletConfigInitParams显示在Environment的属性来源列表中,但似乎只是忽略了我的init-param

我设法通过在两个maven配置文件中提供实际系统属性并使用这些设置运行来设置Spring配置文件,但这不是生产环境的可行解决方案,也不是通过命令行提供这些。

谁能说出我做错了什么?

0 个答案:

没有答案