我定义了一个自定义PropertyPlaceholderConfigurer,它进行REST调用以获取用于解析占位符的属性。
然而,Spring调用了REST调用URL。显然,在 PropertyPlaceholderConfigurer完成之后,这个注入称为。这导致异常,因为PlaceholderConfigurer需要它时URL为null。
我需要鸡蛋来到鸡蛋前面。是否有任何方法可以让注入器在 PlaceholderConfigurer之前运行?如果没有,PlaceholderConfigurer是否有办法预览即将到来的注射?
答案 0 :(得分:1)
我们运行类似的配置,在我们的例子中,我们将数据库凭证存储在本地配置文件中,所有其他属性都存储在数据库中。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1"/>
<property name="locations">
<list>
<value>classpath:app.properties</value>
</list>
</property>
<property name="placeholderPrefix" value="$["/>
<property name="placeholderSuffix" value="]"/>
</bean>
<bean id="propertyConfigurer" class="com.acme.util.DatabasePropertyPlaceholderConfigurer">
<property name="order" value="2"/>
<property name="dataSourceName" value="dataSource"/>
</bean>
在我们的例子中,DatabasePropertyPlaceholderConfigurer需要访问Spring Bean(DataSource),因此我们在覆盖'mergeProperties()'方法中使用BeanFactory来检索该DataSource。在您的情况下,配置要简单得多,因为您需要一个简单的URL配置值。
以下示例可能会解决问题:(请注意,两个配置器使用不同的前缀/后缀:$ []而不是$ {})
<bean id="propertyConfigurer" class="com.acme.util.RESTPropertyPlaceholderConfigurer">
<property name="order" value="2"/>
<property name="url" value="$[config.url]"/>
</bean>