Spring PropertyPlaceholderConfigurer中的属性的运行时加载

时间:2011-07-13 19:12:30

标签: spring

我是Spring框架的新手,并试图查看是否可以在现有PropertyPlaceholderConfigurer实例上找到运行时加载新Properties对象的解决方案。

我首先扩展了Spring的PropertyPlaceholderConfigurer ......并按如下方式连接

<bean class="com.myl.spring.VaultPropertyPlaceholderConfigurer">
 <property name="ignoreUnresolvablePlaceholders" value="true" />
 <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
 <property name="locations">
  <list>
   <value>classpath*:startup.properties</value>
  </list>
 </property>
</bean>

startup.properties只有一个值是一个URL(我发出GET请求来获取更多属性)。如果没有这个提取,我的context.xmls中的占位符就无法解析。

有没有办法可以在创建时调用方法来告诉我的VaultPropertyPlaceholderConfigurer 1。解析硬编码值 - 导致URL 第2位。发出GET请求并加载获取的结果。

1 个答案:

答案 0 :(得分:0)

如何在两个阶段加载属性。首先将startup.properties加载到一个bean中,然后使用第二个bean从URL资源加载属性,如下所示:

<bean id="firstOrderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="order" value="100" />
  <property name="location" value="classpath*:startup.properties" />
</bean>

<bean id="fromUrlProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="${placeholder name from startup.properties}" />
</bean>

第一个bean中的属性“order”将使它比第二个bean更早初始化,这将使第二个bean中的url可用于占位符解析。作为使用“order”的替代方法,可以使用depend-on =“firstOrderProperties”声明第二个bean,以便在第一个bean之后初始化它。

此解决方案将使您无需实现PropertyPlaceholderConfigurer的子类。