4

我有一个非常简单和小型的服务,我正在使用 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>
4

1 回答 1

2

如果

  • property-placeholder在相同的应用程序上下文中使用,并且
  • <import resource="classpath:spring/spring-*.xml"/>没有自己property-placeholder的覆盖 import 语句之前定义的那个,并且
  • datasource.properties真的有一个datasource.bds.driver

然后

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

如果

还有一个地方覆盖了声明之前定义的地方这里有两件事要尝试:property-placeholderimport

  • 在 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-placeholderbean的顺序

于 2012-04-12T22:27:09.990 回答