寫到多數據源事務來了就必定寫成功了多數據源項目,可以參考我上一篇博客:SpringBoot根據包名進行區分使用多數據源
1、文章中的第七步其實就已經配置好了事務管理器到Spring容器了
按照套路來第二個數據源的事務管理Bean名字大家應該想到了那就是“test2TransactionManager”
2、是時候改裝Service層加上事務註解了---->記着這裏是個坑
3、測試------------>報錯
很顯然,有多個事務,容器不知道我們要的是哪個事務,所以第二步的那個坑現在來填
4、填坑
5、問題-------->當Controller層帶着第二個參數age=0到這個Service方法來,運行後的結果對兩個數據到數據庫的結果是怎樣的?
不要偷看答案
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
答案:
第一個成功插入數據庫,第二個失敗進行回滾
解答:
此Service方法上面加上的註解事務爲第二個數據源,所以,第一個數據源它可管不着,第一個執行掉第一行語句就已經插入到數據庫了,第二個由於事務管着了,所以需要等到方法完全執行完畢才能夠插入到數據庫,這個時候發現此方法異常了,於是進行了數據回滾操作。
那麼問題來了,如果是在分佈式項目環境下,又該如何處理SpringBoot的事務問題呢?
我的下一篇博客:SpringBoot使用jta+atomikos解決分佈式事務