【问题标题】:How to guarantee Spring bean order? PropertyPlaceHolder issueSpring bean 顺序如何保证? PropertyPlaceHolder 问题
【发布时间】:2012-04-24 23:48:48
【问题描述】:

我有一个非常简单的小型服务,我正在使用 spring。 为了配置数据库连接,我有一个 DataSource bean,我使用了一个“datasource.properties”文件,该文件使用 .

问题是 Spring 在读取属性文件之前初始化数据源 bean,这样,数据源 bean 正在尝试使用“${datasource.driver}”驱动程序。

如何保证在初始化数据源 bean 之前加载属性?

请看下面的一段代码:

<context:property-placeholder location="classpath:config/datasource.properties"/>
<import resource="classpath:spring/spring-*.xml"/>

<bean id="bdsDatasource"    class="com.mchange.v2.c3p0.ComboPooledDataSource"   destroy-method="close">
    <property name="driverClass"    value="${datasource.bds.driver}" />
    <property name="jdbcUrl"        value="${datasource.bds.url}" />
    <property name="user"           value="${datasource.bds.user}" />
    <property name="password"       value="${datasource.bds.password}" />
</bean>

【问题讨论】:

    标签: spring properties initialization


    【解决方案1】:

    如果

    • property-placeholder 在同一个应用上下文中使用,并且
    • &lt;import resource="classpath:spring/spring-*.xml"/&gt; 没有自己的 property-placeholder 覆盖导入语句之前定义的property-placeholder,并且
    • datasource.properties 真的有一个datasource.bds.driver

    那么

    bdsDatasource${datasource.bds.driver} 应该可以毫无问题地解决。

    万一

    另一个property-placeholder 覆盖了import 语句之前定义的那个,这里有两件事可以尝试:

    • 定义你的property-placeholder导入语句之后:
    <import resource="classpath:spring/spring-*.xml"/>
    <context:property-placeholder location="classpath:config/datasource.properties"/>
    
    <bean id="bdsDatasource"    class="com.mchange.v2.c3p0.ComboPooledDataSource"   destroy-method="close">
        <property name="driverClass"    value="${datasource.bds.driver}" />
        <property name="jdbcUrl"        value="${datasource.bds.url}" />
        <property name="user"           value="${datasource.bds.user}" />
        <property name="password"       value="${datasource.bds.password}" />
    </bean>
    
    • order 属性添加到property-placeholder
    <context:property-placeholder 
        location="classpath:config/datasource.properties" 
        order="0"/>
    

    可能会覆盖多个 property-placeholder bean 的顺序

    【讨论】:

    • 当您希望应用程序使用的占位符 bean 是 PlaceholderConfigurerSupport 的子类时,如何定义 prop order?
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2016-07-05
    • 2018-08-10
    • 2018-06-26
    • 1970-01-01
    • 2022-10-14
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多