由shiro安全框架引發的事務問題-----No EntityManager with actualtransaction available for current thread -

問題描述:最近在給項目中添加單用戶登錄功能時,用到了shiro安全框架。在做登錄認證和權限管理時直接注入調用了業務模塊的service層的查詢方法。導致了業務模塊事務失效報以下錯誤:

No EntityManager with actualtransaction available for current thread - cannot reliably process 'persist'call

在網上找了很多解決辦法,都無效,最後才發現是事務裝配和類注入順序有問題。

spring是先將事務裝配到service中,然後再將類注入到spring容器中。而我在shiro的realm中直接注入了service層,此時事務類還沒有被裝配,所以導致了上面報的錯誤。

解決辦法:我們到知道shiro登錄認證和權限管理,都只是查詢數據進行裝載和認證,所以只要我們將shiro所要注入的類單獨提出來,不和業務中需要事務的類方法放到一起就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章