我要求将所有属性文件存储在目录中.该目录的位置应存储在系统环境变量中.在我的应用程序上下文中,我将需要访问此环境变量来创建FileSystemResource bean.这是我通常拥有的一个例子:
<bean id="properties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<bean class="org.springframework.core.io.FileSystemResource">
<constructor-arg>
<value>myprops.properties</value>
</constructor-arg>
</bean>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
相反,我需要有类似的东西
<value>${prop_file_location}/myprops.properties</value>
Run Code Online (Sandbox Code Playgroud)
prop文件位置是环境变量.有谁知道这样做的简单方法?
我使用的是spring 2.5.6和java 1.6
小智 14
我们后来升级到Spring 3.0.X,我们可以利用spring表达式语言.我们的方法从三个bean简化为以下代码段:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:defaults.properties</value>
<value>file:/a/defined/location/project.properties</value>
<value>file:${AN_ENV_CONFIGURED_DIR}/project.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true" />
<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这使我们可以拥有一个开发(第一个默认值)静态知名位置,或者通过env变量配置的部署位置.配置程序按顺序处理这些(即部署优先于默认值).
我最终采用非程序化方法.我使用MethodInvoker来检索环境值.然后我能够将其传递给FileSystemResource.
<bean id="configPath" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" >
<property name="targetClass" value="java.lang.String" />
<property name="staticMethod" value="java.lang.System.getenv" />
<property name="arguments">
<list>
<value>NAME_OF_VARIABLE</value>
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32847 次 |
| 最近记录: |