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/の例を参照してください。それは私にとってはうまくいきました。