在spring中运行时更改bean属性/值

pre*_*sor 5 java spring hibernate multiple-databases

我使用的是spring mvc + hibernate +两个数据库

例如:我创建了2个sessionFactories.sessionFactory1(使用datasource1)和sessionFactory2(使用datasource2).

是否可以在运行时更改sessionFactory1或更改sessionFactory2sessionFactory,以便dao/s引用它们.sessionFactory已经自动连接到所有dao/s.

我正在寻找它我认为@Configuration可以帮助我,但我不确定.

我正在尝试AbstractRoutingDataSource,但不认为它有帮助.

小智 0

AbstractRoutingDataSource 将为您工作。

首先,您需要创建一个类来存储当前使用的数据库:

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

您需要创建一个类来扩展该类并实现确定当前查找键(),并返回上下文持有者中的当前数据库:

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

public class MyRoutingDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        return MyContextHolder.getDBContext();
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅http://blog.springsource.org/2007/01/23/dynamic-datasource-routing/中的示例。这对我来说效果很好。