5

Spring MVC + Hibernate+2つのデータベースを使用しています

たとえば、2つのsessionFactoriesを作成します。sessionFactory1(を使用してdatasource1)およびsessionFactory2(を使用してdatasource2)。

dao / sがそれらを参照するように、実行時にsessionFactory1またはsessionFactoryに変更することは可能でしょうか。sessionFactory2sessionFactoryはすでにすべてのdao/sに自動配線されています。

私は今それを探しています。@Configurationが私を助けることができると思いますが、私にはわかりません。

AbstractRoutingDataSourceを試していますが、役に立たないと思います。

4

2 に答える 2

2

通常、Springはアプリケーションの起動時にBeanをワイヤリングするため、「再ワイヤリング」(実行時にsessionFactory1への参照をsessionFactory2への参照に置き換える)を実装するのは簡単ではないようです。

たぶん、DAOオブジェクトに接続された「プロキシBean」を実装し、プロキシBeanの「ターゲットSessionFactory」を変更することができます。

于 2012-08-30T17:14:36.803 に答える
0

AbstractRoutingDataSourceはあなたのために働きます。

まず、使用中の現在のDBを格納するクラスを作成する必要があります。

public class MyContextHolder {

    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    public static void setDBContext(String dBContext) {
        contextHolder.set(dBContext);
    }

    public static String getDBContext() {
        return (String) contextHolder.get();
    }

    public static void clearDBContext() {
        contextHolder.remove();
    }

}

これを拡張し、determineCurrentLookupKey()を実装するクラスを作成し、コンテキストホルダーにある現在のデータベースを返す必要があります。

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class MyRoutingDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        return MyContextHolder.getDBContext();
    }
}

http://blog.springsource.org/2007/01/23/dynamic-datasource-routing/の例を参照してください。それは私にとってはうまくいきました。

于 2012-10-03T04:38:33.023 に答える