如何让Spring运行我的自定义PropertyPlaceholderConfigurer _after_运行注入器

时间:2015-01-07 16:09:56

标签: java spring

我定义了一个自定义PropertyPlaceholderConfigurer,它进行REST调用以获取用于解析占位符的属性。

然而,Spring调用了REST调用URL。显然,在 PropertyPlaceholderConfigurer完成之后,这个注入称为。这导致异常,因为PlaceholderConfigurer需要它时URL为null。

我需要鸡蛋来到鸡蛋前面。是否有任何方法可以让注入器在 PlaceholderConfigurer之前运行?如果没有,PlaceholderConfigurer是否有办法预览即将到来的注射?

1 个答案:

答案 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>