整合shiro問題 資料庫事務失效

2021-10-01 19:09:06 字數 885 閱讀 1437

spring事務管理支援兩種型別。一種是程式設計式的事務型別,另外一種是宣告式的事務型別。但是無論哪一種底層都採用spring事務管理器進行統一管理。

spring事務管理介紹我之前寫的還算比較詳細:spring事務管理介紹

總結就是一句話:既然spring事務依賴於動態**,那麼事務能否失效,就開是否生成了**物件。

如果你的專案整合了shiro,那麼注意觀察啟動日誌是否列印了類似於這樣的語句:

bean 'sysuser' of type [com.sun.proxy.$proxy87] is not eligible for getting processed by all beanpostprocessors (for example: not eligible for auto-proxying)
這句話的意思就是sysuser物件被提前初始化了,不會被spring後置處理器攔截處理,導致出現問題,例如不能夠被自動**。

如果你看明白了這句話,我想也大概明白了整合shiro時候為什麼事務會失效了,因為spring事務依賴於aop**技術實現。

整合shiro時候,你在自定義的realm中自動注入了userservice,userservice在這裡被提前初始化了,所以事務失效了。

具體原因:shirofilte***ctorybean實現了後置處理器介面,在載入bean後置處理器前會載入configuration配置類,導致shirofactorybean被初始化了,也就是在這裡提前例項化了相關的bean。

shirofilte***ctorybean -> securitymanager -> realm實現類 -> userservice

在自定義realm的中注入userservice時候,使用懶載入@lazy。

資料庫事務問題

事務是由一組 sql 語句組成的邏輯處理單元。acid 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 原子性 乙個事務 transaction 中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中...

資料庫事務併發問題

乙個資料庫可能擁有多個訪問客戶端,這些客戶端都可以併發方式訪問資料庫。資料庫中的相同資料可能同時被多個事務訪問,如果沒有採取必要的隔離措施,就會導致各種併發問題,破壞資料的完整性。這些問題可以歸結為 5類,包括 3類資料讀問題 髒讀 幻象讀和不可重複讀 以及 2類資料更新問題 第一類丟失更新和第二類...

資料庫事務併發問題

多個事務同時訪問資料庫時候,會發生下列5類問題,包括3類資料讀問題 髒讀,不可重複讀,幻讀 2類資料更新問題 第一類丟失更新,第二類丟失更新 1,髒讀 dirty read a事務讀取b事務尚未提交的更改資料,並在這個資料基礎上操作。如果b事務回滾,那麼a事務讀到的資料根本不是合法的,稱為髒讀。在o...