4

私は春を使用している非常にシンプルで小さなサービスを持っています。データベース接続を構成するために、DataSource Bean があり、.xml を使用してロードされる「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-placeholderimport ステートメントの前に定義されたものをオーバーライドする独自のものはありません。
  • datasource.properties本当に持っているdatasource.bds.driver

それから

bdsDatasource${datasource.bds.driver}は問題なく解決されるはずです。

万一に備えて

ステートメントの前に定義されたものをオーバーライドする別の場所があります。次の2 つのことを試してください。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-placeholder複数のBeanの順序を潜在的にオーバーライドする

于 2012-04-12T22:27:09.990 に答える