我是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请求并加载获取的结果。
答案 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的子类。