hibernate 多数据源事务控制-注解方式

编程式的事务控制很简单.
注解的方式如何操作呢?
比如我有两个数据源,一个是datasouce-vancl-union,一个是datasource-scm
那么就会产生两个sessionfactory,一个叫sessionfactory-vancl-union,一个叫sessionfactory-scm
那么我们就会有两个transactionmanager,一个叫transactionmananger-vancl-union,一个叫transactionmanage-scm.
由于注解的方式,只能声明一个transactionmananger,如下:
<!-- 通过@Transactional注解定义事务-->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />





那么意味着,我们访问另外一个数据源的时候,程序无法对其访问进行事务控制.
怎么解决呢?
我的解决方案如下:
首先给两个transactionmanager起个别名:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<qualifier value="txManager" />
</bean>
<bean id="transactionManagerScm"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="readSessionFactory" />
<qualifier value="txManagerScm" />
</bean>




然后在需要用的事务注解的service类或者方法的@Transactional注解里面加入 value=?? ,用到哪个transactionmanager
就输入哪个的别名.
但是要注意,如果你这个方法里面的sessionfactory如果不是这个transactionmanager管理的sessionfactory的话,
事务配置是无效的.也就是说和没有配置事务一样.
如果想用一个事务控制多个数据源,可以用JTA事务.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值