Change bean property / value at run time in spring

I am using spring mvc + hibernate + two databases

So for example: I am creating 2 sessionFactories. sessionFactory1(using datasource1) and sessionFactory2(using datasource2).

Is it possible to change sessionFactory1either sessionFactory2to sessionFactory at runtime so that dao / s refers to them. sessionFactory is already auto-detected for all dao / s.

I'm looking for him right now. I think @Configuration can help me, but I'm not sure.

I am trying to use AbstractRoutingDataSource but I don't think this helps.

+5
source share
2 answers

Spring beans , " " ( sessionFactory1 sessionFactory2 ) .

, - bean, DAO " SessionFactory" - bean.

+1

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

}

, defineCurrentLookupKey(), db, :

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/. .

0

All Articles