跨数据源事务怎么做?

云淡风轻0415 发布于 2014/09/09 16:47
阅读 706
收藏 2

@JFinal 你好,想跟你请教个问题:

我要在某个Action操作中同时更新多个数据库中的数据。并且想让他们在同一个事务中。该如何配合?

我看了TxByXXXXX.java的代码,都用了DbPro.use(config.getName()).tx(...)方式。但一个actionInvocation中可能会同时使用多个数据源,此处只有一个use(...)。

我测试多数据源操作时,似乎只有第一个被添加到系统中的数据源能正常回滚事务。

我应该如何配置,指点下吧,谢谢。

加载中
0
JFinal
JFinal

    跨多数据源事务属于分布式事务的范畴,实现起来代码比较难看,在找到优雅的方案之前暂时不会动手开发。JFinal 目前只提供了单数据源各自的事务支持。

     楼主可以试试通过 JTA 或 XA 写个 Tx 拦截器支持分布式事务,情况比较复杂:http://blog.csdn.net/bluishglc/article/details/7612811 , 如果有优雅的方案希望能分享出来。

糊搞
回复 @JFinal : 这我知道,所以,只是半成品,但应付不太紧要的数据没有问题,重要的业务数据是不能使用它的。。。
JFinal
JFinal
回复 @糊搞 : 还没回复你邮件呢? 你的方案,设想这样一个场影,假定有两个数据源,同时做事务,当第一个数据源的事务提交成功,而第二个数据源的事务提交时产生异常并成功回滚,而这时第一个数据源的事务提交已成为定事实无法撤消,难点就在这里
糊搞
昨天写了个多数据源事务提交给波总了,但我提交的那个决对是不支持分布式事务和二阶段提交的。。。这东东的确很难搞。
D2-Studio
D2-Studio
果然厉害JTA的XA的确能做这个,+1
0
D2-Studio
D2-Studio
Spring 方法级事务……
Tonlin
Tonlin
测试
0
云淡风轻0415

引用来自“黑白之间_true”的评论

Spring 方法级事务……
项目比较简单,希望能不加Spring。有木有其它办法。
0
魔力猫
魔力猫
你可以配置分布式事务,调用这个事务管理JNDI就是。不过这不是什么最好的办法,分布式事务属于很复杂很麻烦的方案,建议你通过分解业务让这个大事务变成一个个小事务。
0
D2-Studio
D2-Studio
另外还有一种方法就是在数据库上面做数据库代理,把用到的数据源代理到主数据库上,然后写存储过程进行处理相关业务逻辑,我知道ms sql server数据库的方法,其他就不是很清楚了
返回顶部
顶部