mysql atomikos引发-4:提供的XID对此XA资源无效

问题描述

MysqL 5.7,Druid数据源,Atomikos 4.0.4。两个数据库。一提交,一回滚。

我有springmvc应用程序,它从xxljob收集数据并保存在数据库中。尝试将数据持久保存在数据库中时出现随机问题。这个问题很少发生,只有千分之一的人。但是不能仅仅理解原因。

**<bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager">
            <bean class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
                <property name="forceShutdown" value="true"/>
            </bean>
        </property>
        <property name="userTransaction">
            <bean class="com.atomikos.icatch.jta.UserTransactionImp">
                <property name="transactionTimeout" value="30000" />
            </bean>
        </property>
        <!--<property name="allowCustomIsolationLevels" value="true"/>-->
    </bean>
<tx:annotation-driven transaction-manager="jtaTransactionManager" />
@Transactional(value = "jtaTransactionManager",timeout = 30,rollbackFor = Exception.class)**

> 

    2020-09-08 17:15:25 [DEBUG] com.atomikos.datasource.xa.XAResourceTransaction[32] - XAResource.prepare ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3135393935
    35363532343635353237363139:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3239303836 ) returning OK on resource MysqL/main1 represented by XAResource instance co
    m.MysqL.jdbc.jdbc2.optional.JDBC4SuspendableXAConnection@72f9243a
    2020-09-08 17:15:25 [DEBUG] com.atomikos.datasource.xa.XAResourceTransaction[32] - XAResource.prepare ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3135393935
    35363532343635353237363139:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3239303837 ) returning OK on resource MysqL/main2 represented by XAResource instance co
    m.MysqL.jdbc.jdbc2.optional.JDBC4SuspendableXAConnection@6e81e6b
    2020-09-08 17:15:25 [DEBUG] com.atomikos.recovery.xa.XaResourceRecoveryManager[32] - Resource com.atomikos.spring.jdbc.tm recovering XID: com.atomikos.spring.jdbc.tm159
    955652465527619com.atomikos.spring.jdbc.tm29086
    2020-09-08 17:15:25 [DEBUG] com.atomikos.datasource.xa.XAResourceTransaction[32] - XAResource.commit ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D31353939353
    5363532343635353237363139:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3239303836,false ) on resource MysqL/main1 represented by XAResource instance com.mysq
    l.jdbc.jdbc2.optional.JDBC4SuspendableXAConnection@72f9243a
    2020-09-08 17:15:25 [DEBUG] com.atomikos.recovery.xa.XaResourceRecoveryManager[32] - Resource com.atomikos.spring.jdbc.tm recovering XID: com.atomikos.spring.jdbc.tm159
    955652465527619com.atomikos.spring.jdbc.tm29087
    2020-09-08 17:15:25 [DEBUG] com.atomikos.recovery.xa.XaResourceRecoveryManager[32] - Presumed abort of xid: com.atomikos.spring.jdbc.tm159955652465527619com.atomikos.sp
    ring.jdbc.tm29087
    2020-09-08 17:15:25 [DEBUG] com.atomikos.datasource.xa.XAResourceTransaction[32] - XAResource.commit ( 636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D31353939353
    5363532343635353237363139:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3239303837,false ) on resource MysqL/main2 represented by XAResource instance com.mysq
    l.jdbc.jdbc2.optional.JDBC4SuspendableXAConnection@6e81e6b
    2020-09-08 17:15:25 [WARN ] com.atomikos.datasource.xa.XAResourceTransaction[40] - XA resource 'MysqL/main2': commit for XID '636F6D2E61746F6D696B6F732E737072696E672E6A
    6462632E746D313539393535363532343635353237363139:636F6D2E61746F6D696B6F732E737072696E672E6A6462632E746D3239303837' raised -4: the supplied XID is invalid for this XA re
    source
    com.MysqL.jdbc.jdbc2.optional.MysqLXAException: XAER_NOTA: UnkNown XID
            at com.MysqL.jdbc.jdbc2.optional.MysqLXAConnection.mapXAExceptionFromsqlException(MysqLXAConnection.java:581)
            at com.MysqL.jdbc.jdbc2.optional.MysqLXAConnection.dispatchCommand(MysqLXAConnection.java:566)
            at com.MysqL.jdbc.jdbc2.optional.MysqLXAConnection.commit(MysqLXAConnection.java:543)
            at com.MysqL.jdbc.jdbc2.optional.SuspendableXAConnection.commit(SuspendableXAConnection.java:125)
            at com.atomikos.datasource.xa.XAResourceTransaction.commit(XAResourceTransaction.java:555)
            at com.atomikos.icatch.imp.CommitMessage.send(CommitMessage.java:52)
            at com.atomikos.icatch.imp.CommitMessage.send(CommitMessage.java:23)
            at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:67)
            at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:63)
            at com.atomikos.icatch.imp.Propagator.submitPropagationMessage(Propagator.java:42)
            at com.atomikos.icatch.imp.CoordinatorStateHandler.commitFromWithinCallback(CoordinatorStateHandler.java:373)
            at com.atomikos.icatch.imp.IndoubtStateHandler$1.doCommit(IndoubtStateHandler.java:112)
            at com.atomikos.icatch.imp.CoordinatorStateHandler.commitWithAfterCompletionNotification(CoordinatorStateHandler.java:581)
            at com.atomikos.icatch.imp.IndoubtStateHandler.commit(IndoubtStateHandler.java:107)
            at com.atomikos.icatch.imp.CoordinatorImp.commit(CoordinatorImp.java:548)
            at com.atomikos.icatch.imp.CoordinatorImp.terminate(CoordinatorImp.java:690)
            at com.atomikos.icatch.imp.CompositeTransactionImp.commit(CompositeTransactionImp.java:282)
            at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:172)
            at com.atomikos.icatch.jta.TransactionManagerImp.commit(TransactionManagerImp.java:414)
            at com.atomikos.icatch.jta.UserTransactionImp.commit(UserTransactionImp.java:86)
            at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1020)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:484)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
            at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
            at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
            at com.sun.proxy.$Proxy461.synchUnpulishNewProduct(UnkNown Source)
            at com.mia.pop.product.SynchUnpulishProduct.execute(SynchUnpulishProduct.java:149)
            at com.mia.pop.jobhandler.XxlJobHandleService.synchUnpulishProductTaskJob(XxlJobHandleService.java:527)
            at sun.reflect.GeneratedMethodAccessor1534.invoke(UnkNown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:29)
            at com.xxl.job.core.thread.JobThread.run(JobThread.java:152)
    Caused by: java.sql.sqlException: XAER_NOTA: UnkNown XID
            at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:998)
            at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3847)
            at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3783)
            at com.MysqL.jdbc.MysqLIO.sendCommand(MysqLIO.java:2447)
            at com.MysqL.jdbc.MysqLIO.sqlQueryDirect(MysqLIO.java:2594)
            at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2545)
            at com.MysqL.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
            at com.MysqL.jdbc.PreparedStatement.execute(PreparedStatement.java:1193)
            at com.MysqL.jdbc.StatementImpl.createResultSetUsingServerFetch(StatementImpl.java:666)
            at com.MysqL.jdbc.StatementImpl.execute(StatementImpl.java:806)
            at com.MysqL.jdbc.StatementImpl.execute(StatementImpl.java:748)
            at com.MysqL.jdbc.jdbc2.optional.MysqLXAConnection.dispatchCommand(MysqLXAConnection.java:560)

----------

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...