seata 1.6.1
store.mode=db
seata的事务完成后会被清理, 如果存库的话, 保留历史记录还是有些作用的.
接下来分享一下我的解决办法
-
修改删数据逻辑
我用的是DB模式, 所以直接把
io.seata.server.storage.db.session.DataBaseSessionManager#removeGlobalSession
这个方法的删除操作改成更新操作修改
@Override public void removeGlobalSession(GlobalSession session) throws TransactionException { boolean ret = transactionStoreManager.writeSession(LogOperation.GLOBAL_UPDATE, session); if (!ret) { throw new StoreException("removeGlobalSession failed."); } }
如果是file/redis模式, 则修改对应实现类
redis模式:
io.seata.server.storage.redis.session.RedisSessionManager
file模式:
io.seata.server.storage.file.session.FileSessionManager
-
修改启动逻辑
seata会在程序启动时清理掉上次未来得及清理的事务
逻辑位于
io.seata.server.session.SessionHolder#reload
修改为:
protected static void reload(SessionMode sessionMode) { if (ROOT_SESSION_MANAGER instanceof Reloadable) { ((Reloadable) ROOT_SESSION_MANAGER).reload(); } }
注意如果是file模式的话可能会存在问题, 我这里没梳理
完
标签:历史记录,事务,Seata,io,server,reload,session,file,seata From: https://www.cnblogs.com/liangyun/p/17203233.html