0

同じスキームの 2 つのデータベースがあります。

私の休止状態 3.2/Spring 3 アプリケーションには、データベースごとに 1 つのデータソース (jndi 経由) と、データソースごとに 1 つのトランザクション マネージャー (HibernateTransactionManager) があります。

質問: 現在のトランザクションに関連付けられたデータソースを使用するセッション ファクトリのインスタンスを 1 つ使用できますか?

以下の方法があるとします。

@Transactional(readOnly = true, value = "tmDBOne")
public String db1() throws IOException {
    dao.execute(); // dao uses injected session factory
}


@Transactional(readOnly = true, value = "tmDBTwo")
public void db2() throws IOException {
    dao.execute(); // dao uses injected session factory
}

取引マネージャー:

<bean id="tmDBOne"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="dataSource" ref="dsDBOne/>
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean id="tmDBTwo"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="dataSource" ref="dsDBTwo/>
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
4

1 に答える 1

0

いいえ、2 つの sessionFactory が必要です。SessionFactory は 2 番目のレベルのキャッシュを管理します - 2 つの異なるソースからのデータが 2 番目のレベルのキャッシュで結合されると、問題が発生します。

2 次キャッシュを使用していない場合は、Spring が提供する「動的データ ソース ルーティング」サポートを使用して、実行時に基になるデータ ソースを切り替えることを検討できます。

これは、両方のデータ ソースが同じスキーマを持っている場合にのみ機能します (これはあなたの場合のようです)。

于 2013-11-18T06:50:11.963 に答える