Transaction is marked for rollback only or has timed out

在Springboot和Activiti中使用Atomikos时,遇到并发导致事务被标记为rollback only。线程一旦被回收前,所有相关查询会报错。尽管setRollbackOnly()方法理论上会将状态改为Active,但在Atomikos中异常处理仅限于日志记录,导致事务状态无法恢复,引发后续处理错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springboot,Activiti,Atomikos:

com.atomikos.datasource.xa.session.InvalidSessionHandleStateException: Transaction is marked for rollback only or has timed out
    at com.atomikos.datasource.xa.session.NotInBranchStateHandler.checkEnlistBeforeUse(NotInBranchStateHandler.java:39)
    at com.atomikos.datasource.xa.session.TransactionContext.checkEnlistBeforeUse(TransactionContext.java:70)
    at com.atomikos.datasource.xa.session.SessionHandleState.notifyBeforeUse(SessionHandleState.java:160)
    at com.atomikos.jdbc.AtomikosConnectionProxy.enlist(AtomikosConnectionProxy.java:207)
    at com.atomikos.jdbc.AtomikosConnectionProxy.invoke(AtomikosConnectionProxy.java:122)

确认了bug原因:一开始由于并发导致了事务回滚,然后事务状态被标记为rollback,JTA中线程和事务状态是绑定关系,在线程被回收之前,这个线程所有调用oracle连接的sql,都会报rollback异常,直到线程被销毁。

看了下setRollbackOnly ()方法,发现最后是会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值