seata 1.3.0 XA模式,直接使用 @Transactional 方法报错,

hpcdzsge  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(65)

引入的seata后,使用xa模式,直接调用本地事务,不走分布式事务,报错 看上去是直接向tc注册时,但是没有xid,
可是我只使用本地事务,并不走全局事务啊

@Transactional
    @Override
    public void updateUserRole(Long userId) {
      
        //更新数据...

    }

项目里有很多老的方法都是直接使用 @Transactional 本地事务的,有遇到过的吗

报错信息:

Caused by: java.sql.SQLException: failed to register xa branch null since GlobalTransactionNotExist:Response[ TransactionException[Could not found global transaction xid = null, may be has finished.] ]
	at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:137)
	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:287)
	... 99 common frames omitted
Caused by: io.seata.core.exception.RmTransactionException: Response[ TransactionException[Could not found global transaction xid = null, may be has finished.] ]
	at io.seata.rm.AbstractResourceManager.branchRegister(AbstractResourceManager.java:69)
	at io.seata.rm.DefaultResourceManager.branchRegister(DefaultResourceManager.java:96)
	at io.seata.rm.datasource.xa.ConnectionProxyXA.setAutoCommit(ConnectionProxyXA.java:133)
	... 100 common frames omitted
x8goxv8g

x8goxv8g1#

@zanjun9527 堆栈信息发完整的。不要只发这么一小段。

a0zr77ik

a0zr77ik2#

@zanjun9527 堆栈信息发完整的。不要只发这么一小段。

大佬,有空再帮忙看下,使用xa模式遇到的问题,在上面

zengzsys

zengzsys3#

你应该追踪一下方法调用链路,假设A方法加了@transactional,B方法加了@GlobalTransactional,如果A方法调用了B方法,就有可能引发这个异常,这个异常触发的根本原因就是@GlobalTransactional不是当前请求链路中的最顶级的方法,导致在提交或者回滚事务时,拿不到全局事务id。

相关问题