如何使用Multitenance和multi dataSource管理Transaction-manager和sessionFactory

时间:2012-08-07 09:46:56

标签: java spring hibernate multi-tenant

在我的网络应用程序中,我通过注释使用事务管理器Spring3, hibernate3到现在为止这个应用程序single dataSource只有sessionFactory

现在正在转向多租户,其中单独数据库用于单独的租户。现在,我通过每个请求 ThreadLocal 管理所有租户信息,这些信息具有db凭证和dataSource。

但是,当需要为所有这些动态选择的dataSource支持事务管理器时,会出现主要问题。

以下是我的问题:

 1. How to update Transaction Manager as per request when dataSource changes ?
 2. If I also maintain SessionFactory for each tenant as manageing dataSource but how to update Transaction Manager for each sessionFactory ?

注意:我无法在xml文件中定义这些dataSource,因为没有预定义的租户。

  

请帮帮我...... :( ...

1 个答案:

答案 0 :(得分:0)

    @Bean(name="transactionManager1")
    public HibernateTransactionManager hibernateTransactionManager(SessionFactory sessionFactory1){
        HibernateTransactionManager transactionManager1 = new HibernateTransactionManager(sessionFactory);
        return transactionManager1;     
    }


    @Bean(name="transactionManager2")
    public HibernateTransactionManager hibernateTransactionManager(SessionFactory sessionFactory2){
        HibernateTransactionManager transactionManager2 = new HibernateTransactionManager(sessionFactory);
        return transactionManager2;     
    }



    <aop:config>
    <aop:advisor pointcut="execution(* ....)" advice-ref="transactionAdvice1"/>
</aop:config>

<tx:advice id="transactionAdvice1" transaction-manager="transactionManager1">
    <tx:attributes>
        <tx:method ..../>                       
    </tx:attributes>
</tx:advice>

    <aop:config>
    <aop:advisor pointcut="execution(* ....)" advice-ref="transactionAdvice2"/>
</aop:config>

<tx:advice id="transactionAdvice1" transaction-manager="transactionManager2">
    <tx:attributes>
        <tx:method ..../>                       
    </tx:attributes>
</tx:advice>