document.write("");

seata 1.3.0 挂起,恢复,手动回滚,Data too long for column 'row_key' at row 1

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);
}

 

posted @ 2025-03-15 13:57  人间春风意  阅读(60)  评论(0)    收藏  举报