如何为整个项目配置单个属性占位符

时间:2017-07-31 16:19:15

标签: java spring properties configuration

在我的项目中,我有多个上下文文件。我正在使用如下所示的属性占位符加载属性文件。

以下是我的context.xml文件。

a.xml
       <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="file:${conf.path}/devconfiguration.xml" />
        <!--<property name="location" value="file:${conf.path}/sitconfiguration.xml" />
            <property name="location" value="file:${conf.path}/uatconfiguration.xml" />
            <property name="location" value="file:${conf.path}/prodconfiguration.xml" />-->
        </bean>

b.xml
       <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="file:${conf.path}/devconfiguration.xml" />
        <!--<property name="location" value="file:${conf.path}/sitconfiguration.xml" />
            <property name="location" value="file:${conf.path}/uatconfiguration.xml" />
            <property name="location" value="file:${conf.path}/prodconfiguration.xml" />-->
        </bean>

c.xml
       <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="file:${conf.path}/devconfiguration.xml" />
        <!--<property name="location" value="file:${conf.path}/sitconfiguration.xml" />
            <property name="location" value="file:${conf.path}/uatconfiguration.xml" />
            <property name="location" value="file:${conf.path}/prodconfiguration.xml" />-->
        </bean>

每次我们要更改所有上下文文件时都会获取war文件。他们是否可以为整个项目拥有一个房产持有人。 我试过但是我不能在不使用属性占位符bean的情况下加载属性文件。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以将b.xmlc.xml的定义导入a.xml

<beans> // a.xml
...
    <import resource="classpath:b.xml"/>
    <import resource="classpath:c.xml"/>

现在,b.xml

中将提供c.xmla.xml的所有定义

你可以在任何xml的

中定义它们
<context:property-placeholder
location="classpath:a.properties,
          classpath:b.properties,
          classpath:c.properties"
ignore-unresolvable="true"/>

或者如果您没有使用context命名空间

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:a.properties</value>
                <value>classpath:b.properties</value>
                <value>classpath:c.properties</value>
            </list>
        </property> 
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>

答案 1 :(得分:0)

如果我正确理解了场景,那么每个环境有3个配置?也许是区域性的,你可以在不同的xml文件之间切换。

您应该做的只是一个xml文件,它解析为属性文件中的属性。

资源文件夹中每个环境都有一个属性文件。

在启动时,您可以传递一个jvm参数来设置“区域”或您识别环境的方式,然后“填充”您的xml,其中存在属性文件中值的占位符。

site应该可以帮助您开始使用。