seata Caused by: com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): java.time.LocalDateTime

w1jd8yoj  于 2个月前  发布在  Java
关注(0)|答案(4)|浏览(83)

1、新增完订单后,成功。
2、测试余额不足情况
3、事务回滚
4、io.seata.core.exception.BranchTransactionException: Branch session rollback failed and try again later xid = 192.168.43.131:8091:5935898758734508221 branchId = 5935898758734508223 Class cannot be created (missing no-arg constructor): java.time.LocalDateTime
Serialization trace:
value (io.seata.rm.datasource.sql.struct.Field)
fields (io.seata.rm.datasource.sql.struct.Row)
rows (io.seata.rm.datasource.sql.struct.TableRecords)
afterImage (io.seata.rm.datasource.undo.SQLUndoLog)
sqlUndoLogs (io.seata.rm.datasource.undo.BranchUndoLog)
at io.seata.rm.datasource.undo.AbstractUndoLogManager.undo(AbstractUndoLogManager.java:339)
at io.seata.rm.datasource.DataSourceManager.branchRollback(DataSourceManager.java:178)
at io.seata.rm.AbstractRMHandler.doBranchRollback(AbstractRMHandler.java:125)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:67)
at io.seata.rm.AbstractRMHandler$2.execute(AbstractRMHandler.java:63)
at io.seata.core.exception.AbstractExceptionHandler.exceptionHandleTemplate(AbstractExceptionHandler.java:116)
at io.seata.rm.AbstractRMHandler.handle(AbstractRMHandler.java:63)
at io.seata.rm.DefaultRMHandler.handle(DefaultRMHandler.java:63)
at io.seata.core.protocol.transaction.BranchRollbackRequest.handle(BranchRollbackRequest.java:35)
at io.seata.rm.AbstractRMHandler.onRequest(AbstractRMHandler.java:150)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.handleBranchRollback(RmBranchRollbackProcessor.java:63)
at io.seata.core.rpc.processor.client.RmBranchRollbackProcessor.process(RmBranchRollbackProcessor.java:58)
at io.seata.core.rpc.netty.AbstractNettyRemoting.lambda$processMessage$2(AbstractNettyRemoting.java:265)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): java.time.LocalDateTime

vu8f3i0k

vu8f3i0k1#

解决方式3种

  1. 可以更换序列化方式
  2. 可以实现kryo对LocalDateTime的序列化,具体实现可以参考seata-plugin中jackson工程
  3. 如果是mysql数据库驱动,可以更换一下数据库驱动,例如版本8.0.19(可能可以解决)
myzjeezk

myzjeezk2#

@jsbxyyx 我使用8.0.19或者更高的mysql驱动依然有问题,,所以3是无效的,,想请问下更换序列化方式,,现在哪个支持
seata 1.4.2

hs1ihplo

hs1ihplo3#

如果你本地接收的类型为LocalDateTime,那么就只能自己实现序列化了

vybvopom

vybvopom4#

我遇到了同样的问题,但最终解决了
遇到问题的环境:
seata-server 1.4.2
alibaba cloud version : 2021.1
spring-boot.version 2.6.4
spring-cloud.version: 2021.0.1
spring-cloud-alibaba.version : 2021.1
alibaba.nacos.version : 2.0.4
mysql driver : 8.0.24
seata-serializer-kryo : 1.4.2
序列化方式: kryo
解决方式: 对mysql 驱动降级,就可以正常回滚了,降级到了 5.7.49

相关问题