记录: seata回滚 Can not update sharding key的解决

在公司,同事在使用teata过程中,回滚出现Can not update sharding key...,之后无限循环报错重试.无头绪,找到了我.
字面上看是其整合shardingsphere(shardingJDBC),反向生成回滚语句更新了sharding key(分片键值),触发sharding的规则约束.道理很容易理解.如果sharding key做了变更,那他所对应的分区就可能变动.
如果,主键和sharding key 不一致时,即使seata的反向回滚update的sql 将sharding key 的原值附加上去,亦会触发sharding jdbc的规则约束报错.
seata相关代码比较简单,有兴趣的可以看下MySQLUndoUpdateExecutorSQLUndoLog.
设想,如果我是seata的架构设计者,对这类情况势必会有相关配置处理.遂查找seata相关配置项,发现seata.client.undo.only-care-update-columns,貌似很有相关性.
增加配置seata.client.undo.only-care-update-columns=true.问题解决.

你可能感兴趣的:(记录: seata回滚 Can not update sharding key的解决)