gpt4 book ai didi

java - 我可以为 Spring FileSystemResource 使用基于环境变量的位置吗?

转载 作者:IT老高 更新时间:2023-10-28 13:59:01 27 4
gpt4 key购买 nike

我需要将我们所有的属性文件存储在一个目录中。此目录的位置应存储在系统环境变量中。在我的应用程序上下文中,我需要访问这个环境变量来创建 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>

相反,我需要让它像

<value>${prop_file_location}/myprops.properties</value>

prop 文件位置是一个环境变量。有谁知道这样做的简单方法?

我使用的是 spring 2.5.6 和 java 1.6

最佳答案

更新

我们后来升级到 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>

这允许我们拥有一个静态已知的开发(第一个默认值)位置,或者通过 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>

关于java - 我可以为 Spring FileSystemResource 使用基于环境变量的位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1841857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com