关于事务嵌套的解决方案

image.png

jfinal的事务核心代码

  1. 开始事务

  2. 设置自动提交 = false

  3. 收集执行的sql

  4. catch exception就rollback 正常就commit


但是如果我现在场景是这样的

@Before(Tx.class)
TestAService{
    public void funA(){
        //do A db operation   
    }  
}
@Before(Tx.class)
TestBService{
    public void funB(){
         TestAService.funA()
        //do B db operation   
    } 
}


业务B自己有数据库操作,而且去调用了业务A的逻辑代码,在业务A中也做了数据库操作,如果业务A成功,根据jfinal的事务代码应该inv.invoke后直接conn.commit了,这时如果B业务失败了rollback就会有脏数据。

这种事务嵌套的情况怎么解决比较好?


评论区

JFinal

2017-08-07 19:35

不用担心,嵌套事务会合并为一个事务,单步调试 Tx.java 即可知道

Irin.Chan

2017-08-08 09:00

@JFinal 其实有个疑问,JFinal支不支持嵌套事物呢? 之前跟过Tx.java发现是同一个事物,没找到其它的,Atom的level也不是,后来自己用了savepoint。

热门反馈

扫码入社