0

在我的 Web 应用程序中,我Spring3, hibernate3通过注释与事务管理器一起使用,直到现在这个应用程序single dataSource非常单一sessionFactory

现在因为这正在转移到具有单独的 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 文件中定义这些数据源,因为没有预定义的租户。

请帮我 ... :( ...

4

1 回答 1

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>    
于 2012-08-07T11:20:25.913 回答