1. 程式人生 > 其它 >springboot設定雙資料來源,事務@Transitional註解的一些問題

springboot設定雙資料來源,事務@Transitional註解的一些問題

技術標籤:springboot資料庫springmysql

記一個最近遇到的問題,等後面瞭解springboot中事務管理的原始碼之後會來更新詳細說明

· 關於springboot中多資料來源的配置,檢視之前的文章

專案場景:

由於最近做的專案中遇到多資料來源的業務場景,就在思考一個問題,如果一個操作裡面包含了多個數據庫操作,並且這些資料庫操作的資料來源不止一個。需要使用事務來,保持資料一致性。


問題描述:

為了能夠使得多個數據庫操作能保持資料一致,就會使用到事務,但是如果使用springboot的@Transitional註解來做事務會報錯

@Override
    @Transactional
(rollbackFor = Exception.class) public void testData(){ mysqlDataMapper.updateTest();//操作資料庫A syncDataDao.updateTest();//操作資料庫B throw new RuntimeException(); }

錯誤資訊:
No qualifying bean of type ‘org.springframework.transaction.PlatformTransactionManager’ available: more than one ‘primary’ bean found among candidates: [mysqlTransactionManager, oracleTransactionManager]


原因分析:

從提示資訊可以看出,原因是因為配置了多個數據源,存在多個事務管理器PlatformTransactionManager

解決方案:

可以在@Transitional中新增事務屬性,指定事務管理器:
transactionManager = “mysqlTransactionManager”
但是這樣只能對指定的資料來源啟動事務。其他有待研究方案
在這裡插入圖片描述