异常信息如下:
org.springframework.transaction.TransactionSystemException: Could not commit JDBC transaction; nested exception is java.sql.SQLException: io.seata.core.exception.RmTransactionException: Response[ TransactionException[branch register request failed. xid=192.168.0.152:8091:211526669544992768, msg=Data truncation: Data too lo ]
上述异常的原因分析:
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(128),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
seata db模式下lock_table表 table_name字段长度限制在32位,但是一般项目表名没有长度限制,也就是说会超过32位,所以在服务在注册事务分支时发生异常。
解决方案:
方案一:建表时表名不能超过32位,建议在20位以内
方案二:修改lock_table表中table_name字段长度(实际场景考虑),建议该种方案