在我的网络应用程序中,我通过注释使用事务管理器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,因为没有预定义的租户。
请帮帮我...... :( ...
答案 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>