1. 报错:Data too long for column 'row_key' at row 1
查看seata server DB的LockTable表,修改row_key字段长度,为Mysql DB时,修改为 768(InnoDB 的索引长度默认最大为 3072 字节 (每个字符占 4 字节), 3072 /4 = 768),pk字段看情况调整,也可一并调整为768
注意seata的DB的位置,可以在seata部署的文件夹中conf中file.conf找到,也可以同步看一下seata注册到的nacos上写的DB的配置,如果二者不一致,可以先修改在部署文件夹中找到的DB对应的row_key字段长度
2. 手动回滚
String xid = RootContext.getXID();private void rollBackHandle(String xid) {log.info("手动回滚Seata事务 {} start", xid);if (RootContext.inGlobalTransaction()) {try {GlobalTransactionContext.reload(RootContext.getXID()).rollback();} catch (TransactionException e1) {log.error("手动回滚Seata事务出现异常", e1);}}log.info("手动回滚Seata事务 {} end", xid);
}
3. 挂起
String xid = RootContext.getXID();private SuspendedResourcesHolder unBindHandle(String xid) {log.info("手动挂起Seata事务 {} start", xid);SuspendedResourcesHolder handle = null;if (RootContext.inGlobalTransaction()) {try {handle = GlobalTransactionContext.reload(RootContext.getXID()).suspend();} catch (TransactionException e1) {log.error("手动挂起Seata事务出现异常", e1);}}log.info("手动挂起Seata事务 {} end", xid);return handle;
}
4. 挂起后的恢复
String xid = RootContext.getXID();private void bindHandle(String xid, SuspendedResourcesHolder suspendedResourcesHolder) {log.info("手动恢复Seata事务 {} start", xid);if (RootContext.inGlobalTransaction()) {try {GlobalTransactionContext.reload(RootContext.getXID()).resume(suspendedResourcesHolder);} catch (TransactionException e1) {log.error("手动恢复Seata事务出现异常", e1);}}log.info("手动恢复Seata事务 {} end", xid);
}