Mycat的事務異常:Caused by: java.sql.SQLException: Transaction error, need to rollback.Distributed transaction is disabled!


工作中踩到的一個坑 ,一個報錯,導致整個服務不能用。工程部署四個節點,請求是按輪詢機制分發的,所以請求四次報錯,整個系統癱瘓。記錄下 。

項目環境:spring +Mybaties +mycat +Druid+mysql,

很早前寫的一個新增方法,后來同事把表遷移到別的庫去了 ,但是日志表又沒有遷移 ,所以新增的表和日志表不在一個物理庫中,而新曾的方法又開啟了spring事務,

但是系統mycat把分布式事務關了 ,沒有開分布式事務,然后請求過來就報錯:如標題不支持分布式事務。而且,一報錯,后續進來的請求,只要開啟了事務,就會報同樣的錯

這個我現在都沒弄清楚。請求事務方法如下代碼:

public int save(List<GwAcceptCriteria> entityList) throws Exception { // 方法加入spring事務支持。
        if(null == entityList||entityList.isEmpty())
            return 0;
        
        ArrayList<BaseLog> Logs =  new ArrayList<>();
        ArrayList<GwAcceptCriteria> saveData =  new ArrayList<>();
        for (GwAcceptCriteria gwAcceptCriteria : entityList) {
            gwAcceptCriteria.setCreateEmp(BaseContextUtil.getCurrentUser());
            gwAcceptCriteria.setCreateTime(DateUtils.getNow());
            gwAcceptCriteria.setModifyTime(DateUtils.getNow());
            BaseLog log = getBLog(OperateTypeUtil.ADD_TYPE , null, gwAcceptCriteria);
            Logs.add(log);
            if(isDuplicates(gwAcceptCriteria)) {// 校驗數據庫數據是否重復 數據庫節點DB1
                continue;
            }
            saveData.add(gwAcceptCriteria);
        }
        if(saveData.isEmpty())
            return 0;
        int  num = gwAcceptCriteriaMapper.insertList(saveData);    
        baseLogManager.saveList(Logs); // 保存實體日志  數據庫節點DB2
        logger.info(">>>>>>>>>>> 官網收寄標准管理-->{}<--數據{}條 ", OperateTypeUtil.ADD_TYPE,num);
        return num;
    }

報錯異常如下圖片:

 解決方法:

  1.把方法內操作的數據表統一到一個物理庫。

  2.關閉方法的事務支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM