然後再來說說為什麼會發生這個錯誤。**中service都是加了事務的,然而並不是所有的service都需要開啟事務,因為有些service根本不支援事務,如果乙個service本身不支援事務又加了事務@transactional的話就會拋「jta transaction unexpectedly rolled back (maybe due to a timeout); nested」這個異常。在一般公司開發的時候,會呼叫外部的介面,這個是不需要查詢我們本地的資料庫的,也就是說這裡是不能開事務的。檢查一下你的不支援事務的service,把事務關閉就問題解決了。另外,如果是service調service(巢狀事務),大service開啟了事務,這就是說預設裡面的service也是開啟事務的(可以去看一下事務的傳播行為),這裡可以可以設定propagation,就醬,今天還一堆bug在等著我喃。美好的一天從bug開始。
以上暴露了兩個問題:
1)事務註解是單獨載入某個方法上 還是 載入服務類上 亦或是載入controller上?
2)多個標有事務的service方法 內嵌呼叫 會有什麼問題,事務隔離級別、傳播行為此時該怎麼配置?
Spring事務傳播註解
事務註解 transactional propagation propagation.required 括號裡propagation還有很多其他屬性 required 預設 支援使用當前事務,如果當前事務不存在,建立乙個新事務。supports 支援使用當前事務,如果當前事務不存在,則不使用事務。m...
spring註解事務傳播行為
在 service 類前加上 transactional 宣告這個 service 所有方法需要事務管理。每乙個業務方法開始時都會開啟乙個事務。spring 預設情況下會對執行期例外 runtimeexception 進行事務回滾。這個例外是 unchecked 如果遇到 checked 意外就不回...
事務的隔離級別舉例 事務,事務隔離級別,傳播行為
什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換為另一種狀態,事務須服從acid原則 原子性 事務要麼全部被執行,要麼全部不執行。成功則資料庫狀態發生變化,失敗則不會發生狀態轉換 一致性 使資料庫從一種正確狀態轉換成另外...