Spring系统属性过早解决

时间:2018-08-27 08:33:09

标签: java spring maven spring-mvc dependency-injection

我正在Web应用程序的Spring 3.2.14.RELEASE中使用PropertyPlaceholderConfigurer。我的PropertyContext.xml文件中包含以下部分。

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
            <prop key="hibernate.show_sql">false</prop>
        </props>
    </property>
    <property name="locations">
        <list>
            <value>classpath:globalDefinitions.properties</value>
            <value>file:${user.home}/myapplication.properties</value>
        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true"/>
</bean>

我跑步时

mvn clean install -DskipTests=true

我打开生成的war文件,发现第二行的 locations 值已经解析为笔记本电脑的 $ {user.home} 。 我期望在创建Spring Context时会发生这种情况。

我们要在构建服务器上构建war文件,然后将其传输到Test / Prod计算机,以便在我们使用不同的$ {user.home}值时给我们带来麻烦。

我在做什么错?这是预期的行为还是我有其他需要干扰的maven插件?

1 个答案:

答案 0 :(得分:0)

问题是Maven资源插件,用于处理src / main / recources下的文件并在构建阶段评估$ {user.home}的值。(感谢@BackSlash)

因此我已禁用了Maven资源插件中对PropertyContext的过滤,并且该过滤器开始按预期方式运行。