我正在尝试从环境变量加载属性文件,所以这是我尝试过的:
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:messages/application.properties</value>
<value>file:${My_ENV_VAR}/*.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true" />
<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>
我有一个名为My_ENV_VAR=C:\Program Files\My Folder\props.properties
的新环境变量
但是当停止并启动应用程序时,没有设置变量的值,任何想法为什么?
更新:要求
我想从文件系统上的外部属性文件中读取 applicationContext.xml 中的hibernate属性(url,username,password),其路径存储在环境变量中。
答案 0 :(得分:8)
您正尝试使用PropertyPlaceholderConfigurer
创建PropertyPlaceholderConfigurer
。这是一个鸡/蛋问题,它无法正常工作!
尝试使用表达式语言(请参阅this section以供参考),但在您的情况下,它很棘手,因为您想要混合静态和动态内容。可能这样的事情会起作用:
<property name="locations"
value="classpath:messages/application.properties,
#{ T(java.lang.System).getenv('MY_ENV_VAR')}" />
<!-- changed method name, it's getenv(), not getEnv() -->
答案 1 :(得分:1)
首先声明spring bean
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
现在在WEB-INF/classes
目录中创建文件config.properties
并输入:
jboss.variable=${jboss.modules.dir}
注意:当我部署JBoss 6 EAP时,日志会显示:
jboss.modules.dir = C:\Java\jee-container\jboss-eap-6.1\modules
并在应用程序上下文文件中使用该变量:
<bean id="nameOfBean"
class="com.moeandjava.pusku.MySpringBean">
<property name="path" value="${jboss.variable}" />
</bean>
抱歉我的英文不好