Jfinal 在控制器中做事务隔离无效的问题

波总您好,Jfinal在高并发下,两个线程进入@Before(Tx.class)标注的控制器,两个线程获取的订单信息都是未接单,于是两个线程都接单了,最终只有一个线程的用户接单成功,另一个用户接单未成功,但是资金却冻结了;ActiveRecordPlugin的隔离级别设置为了Connection.TRANSACTION_REPEATABLE_READ,MYSQL5.6的事物隔离级别为REPEATABLE-READ;同时也在控制器中尝试用Db.update("update table set status = 1 where id = xxx");的方式获得返回影响的条目数,双线程均返回1,然后就不知道改怎么做了,望不吝赐教

评论区

JFinal

2016-07-08 11:58

是不是在多数据源情况下做的?jfinal 只支持某个数据源之上的事务,不能跨数据源,这属于分布式事务的范畴。另外,尝试将事务级别调整到 TRANSACTION_SERIALIZABLE 试试,或许是当前你的业务级别要求更高,记得搞定后回来分享一下

bailey

2016-07-08 16:52

@JFinal 不是多数据源,Db.update("update table set status = 1 where id = xxx and status = 0");这里我增加了“and status = 0”之后倒是没问题了...但这样的话就不能用全局来控制了,那我再试下TRANSACTION_SERIALIZABLE吧

Dimitar

2017-09-24 15:10

@JFinal 什么时候可以支持分布式事务?紧急。。。

JFinal

2017-09-24 16:51

@Dimitar 分布式不是不可以支持,而是支持的方案过于复杂,jfinal 一直坚持极简设计,所以复杂的方案没办法接受,如果有了简洁方案,会立即添加这个功能特性

工程师

2017-10-19 20:04

Jfinal手动事务无效,程序已经报错了,但是为什么事务还是提交了

热门反馈

扫码入社