在Spring应用程序上下文中读取环境变量

在Spring应用程序上下文中读取环境变量,spring,Spring,我有三个环境变量。 我的话题 我的环境\u工厂 我的爸爸 第一,我的主题是这样的 <bean id="myPublishTopic" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate"> <ref bean="jndiTemplate"/> </property>

我有三个环境变量。 我的话题 我的环境\u工厂 我的爸爸

第一,我的主题是这样的

<bean id="myPublishTopic" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate"/>
        </property>
        <property name="jndiName">
            <value>fxClientDestinationUID=${MY_TOPIC}</value>
        </property>
    </bean> 

fxClientDestinationUID=${MY_TOPIC}
从环境变量中读取后两个变量不起作用。它是如何工作的

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
         <props>
            <prop key="java.naming.factory.initial">${MY_CONTEXT_FACTORY}</prop>
            <prop key="java.naming.provider.url">${MY_LDAP}</prop>
         </props>
        </property>
    </bean> 

${MY_CONTEXT_FACTORY}
${MY_LDAP}
只有当我从我想要避免的属性文件中读取它时,最后两个才起作用

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location"><value>/WEB-INF/classes/springConfig-devel.properties</value></property>
    </bean>

/WEB-INF/classes/springConfig-devel.properties

如果您使用的是Spring 3+,则可以使用Spring表达式语言

使用
#{systemEnvironment['NAME']}
访问环境变量

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">#{systemEnvironment['MY_CONTEXT_FACTORY']}</prop>
                <prop key="java.naming.provider.url">#{systemEnvironment['MY_LDAP']}</prop>
         </props>
    </property>
</bean> 

#{systemEnvironment['MY_CONTEXT_FACTORY']}
#{systemEnvironment['MY_LDAP']}

使用
#{systemProperties['value']}
获取Java系统属性。

我正在使用Spring 2.5.6解决方案吗?我想您需要使用
PropertyPlaceHolderConfigure
并将
searchSystemEnvironment
设置为
true
。我建议升级到较新版本的Spring(如果可能的话)。