今天,使用@transactional,但是事務卻不起作用,配置確定配置成功,在網上查詢資料,在每個每個原因都試了之後仍然無效,最終發現,原來他們都漏了乙個原因,而我正好是這個原因。
因為spring容器和spring-mvc是父子容器,spring容器會先載入,如果此時掃瞄了controller,但未掃瞄到service。
spring事務配置檔案還有上下文都是通過org.springframework.web.context.contextloaderlistener載入的,
而spring mvc的action是通過org.springframework.web.servlet.dispatcherservlet載入的。
web是先啟動contextloaderlistener後啟動dispatcherservlet
在contextloaderlistener載入的時候action並沒在容器中,所以現在使用aop新增事務或者掃瞄註解都是無用的。
結論:讓spring掃瞄註冊service實現類,讓mvc掃瞄註冊controller,此時spring父容器已經註冊service為bean,此時事務可以得到正常配置。
原文:
Transactional事務原理
這個是spring的宣告式事務管理,基於aop程式設計,是一種動態 模式。疑問 1.這個註解是怎麼生效的?配置了transactional註解後,spring容器初始化bean的時候,給他生成 類,執行的時候控制事務的提交。2.多個資料庫的事務怎麼辦?你需要在註解的地方指明資料來源 transact...
Transactional事務幾點注意
這裡面有幾點需要大家留意 a.乙個功能是否要事務,必須納入設計 編碼考慮。不能僅僅完成了基本功能就ok。b.如果加了事務,必須做好開發環境測試 測試環境也盡量觸發異常 測試回滾 確保事務生效。c.以下列了事務使用過程的注意事項,請大家留意。1.不要在介面上宣告 transactional 而要在具體...
Transactional事務幾點注意
這裡面有幾點需要大家留意 a.乙個功能是否要事務,必須納入設計 編碼考慮。不能僅僅完成了基本功能就ok。b.如果加了事務,必須做好開發環境測試 測試環境也盡量觸發異常 測試回滾 確保事務生效。c.以下列了事務使用過程的注意事項,請大家留意。1.不要在介面上宣告 transactional 而要在具體...