Spring公共属性引用,每个应用程序具有不同的值

时间:2015-12-17 06:22:26

标签: java spring

我有一个用于所有项目的bean(不同的war文件)。 该特定bean需要属性appname(以了解哪个应用程序正在使用该bean)。 我该如何配置?

我尝试按以下方式传递值:

ResizeMode="CanResize"

Bean定义:

<bean id="appNameProperty" class="java.util.Properties">
    <property name="appName" value="app1" />
</bean>

其中appName应该是String值。 部署我的应用时出现以下异常:

<bean id="someClass" class="someClass">
    <property name="appName" value="#{appNameProperty.appName}" />
</bean>

2 个答案:

答案 0 :(得分:1)

要避免使用VM参数,可以使用上面提到的属性占位符配置器。如果每个应用程序的应用程序名称都是固定的,并且您在任何地方使用war文件,则可以添加例如“/ WEB-INF / config”到属性列表的位置,并在那里放置一个包含app-name的属性文件:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <!-- further locations -->
            <value>WEB-INF/config/*.properties</value>
            <!-- further locations -->
        </list>
    </property>
    <!-- further configuration as needed -->
</bean>

答案 1 :(得分:0)

这可能会对你有帮助。

<bean id="propertyPlaceholderConfigurer"   
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
 <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
 <property name="searchSystemEnvironment" value="true" />
</bean>  

<bean id="yourBean" class="path.to.your.BeanClass"> 
   <property name="appName"   value="#{systemProperties['appName']}"/>
</bean>

您需要做的就是在启动应用程序时传递VM arguement -DappName = abcApp。

ref PropertyPlaceHolderConfigurer