多数据源操作异常时事务不回滚

blob.png

我的测试代码中,先向A数据源插入一条正确的数据,再向B数据源插入一条会导致异常的数据。出现异常了,但是对A数据源的操作依然成功了。是我的代码问题,还是说JFinal只支持多数据源各自独立的事务,不支持跨数据源的事务?


提个建议,希望JFinal社区提供个搜索反馈的功能,用户可以先搜一下和自己相同的问题是否已经得到解答。28也的反馈一个一个找,太慢了

评论区

JFinal

2016-10-22 16:23

跨数据源事务属于分布式事务范畴,目前 jfinal 还未找到极简设计方案,所以暂不支持,目前只支持某一个数据源的回滚,Tx 拦截器默认支持主数据源事务,当需要支持其它数源事务时,Tx 需要使用 TxConfig(configName) 配合指定

搜索功能是必须要加的,只是现在还没安排出时间来,新社区刚上线不久,很多功能都在开发之中,多多关注社区动态

我爱编程

2016-10-22 17:29

@JFinal 老大的回复还是一如既往的迅速,小弟倍感荣幸

JFinal

2016-10-22 19:19

@我爱编程 多多关注社区动态,多多支持社区发展

我爱编程

2016-10-27 17:01

@JFinal 会的,已经投入JFinal的阵营。

tonghu008

2016-11-02 10:27

还不能用尖括号啊,重发用书名号代替
我也遇到这个问题,我想如果把ThreadLocal《Connection》 threadLocal = new ThreadLocal《Connection》();
改为ThreadLocal《List《Connection》》 threadLocal = new ThreadLocal《List《Connection》》();
将这个线程操作的Connection放到list里面,遇到异常或者手动回滚事务的时候把list里面的Connection都回滚一下,是否可以这样简单的解决呢?

JFinal

2016-11-02 10:59

@tonghu008 这样是不可以的。想象一下,一共有两个数据源,在最后提交时,第一个提交成功,第二个失败被回滚,这里你想再回滚第一个时已然不可能,第一个已经被正确 commit 了

所以,为什么说这是一个分布式事务问题范畴,就是因为需要将多个数据源事务以某种方式给弄成一整个事务,涉及类似于分段提交,提交日志等事情,通过传统的实现方案是可以搞定的,但 jfinal 只接受简洁的方案,目前还没时间去弄

热门反馈

扫码入社