【问题标题】:how to manage Transaction-manager and sessionFactory with Multitenance with multi dataSource如何使用多数据源管理事务管理器和会话工厂
【发布时间】:2012-08-07 23:03:39
【问题描述】:

在我的网络应用程序中,我通过注释将Spring3, hibernate3 与事务管理器一起使用,直到现在这个应用程序只有single dataSource,所以只有sessionFactory

现在,这正在转移到 Multitenant,其中有 Separate DB 用于单独的租户。目前,我正在通过 ThreadLocal 每个请求管理所有租户信息,这些请求具有数据库凭据和数据源。

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

以下是我的问题:

 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 文件中定义这些数据源,因为没有预定义的租户。

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

【问题讨论】:

    标签: java spring hibernate multi-tenant


    【解决方案1】:
        @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>    
    

    【讨论】:

    • 嘿 Nandkumar,正如我已经说过的,我不能为事务管理器使用基于 XML 的配置,因为我不知道有多少数据源必须这样做。我认为(不知道对错)只会有在 XMl 中配置的一个事务管理器。为此,每个新请求都会动态更新数据源(根据需要)。弹簧可以实现这种类型的事情吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2016-09-25
    • 2012-02-02
    • 2021-04-18
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多