javascript
Springboot集成Shiro+Redis后,@Transactional注解不起作用
為什么80%的碼農都做不了架構師?>>> ??
使用Springboot構建 mybatis+Shiro+Redis+Druid 的前后端分離web項目, 具體可以參考博客https://www.cnblogs.com/caichaoqi/p/8900677.html
在集成Shiro+Redis之后,發現數據庫事物不起作用,即不論給Service方法加@Transactional,還是使用全局的事物AOP,在執行Service中的方法時都是沒有事物的,可以通過下面代碼來判斷當前方法中是否有事物。?
boolean actualTransactionActive = TransactionSynchronizationManager.isActualTransactionActive();經過谷歌百度之后,發現了這個帖子https://stackoverflow.com/questions/21512791/spring-service-with-cacheable-methods-gets-initialized-without-cache-when-autowi,?
發現在集成Shiro的時候,是需要自己實現 AuthorizingRealm的,而在該Realm中需要通過UserService中的方法來查詢用戶信息,所以就在該類中注入了UserService,這樣就導致了該UserService在其他controller調用的時候,如果該UserService有事物,就會發現事物根本不起作用。
解決方法:
在自己實現的Realm中,在注入Service的時候,加上注解@Lazy 進行延時注入:
/*** 自定義ShiroRealm 進行身份認證和授權* @author Declan*/ @Slf4j public class MaccShiroRealm extends AuthorizingRealm {@Autowired@Lazyprivate IUserService userService;@Autowired@Lazyprivate IRoleService roleService;@Autowired@Lazyprivate IPermissionService permissionService;// ....} ?轉載于:https://my.oschina.net/Declan/blog/3012936
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Springboot集成Shiro+Redis后,@Transactional注解不起作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB基础命令
- 下一篇: 数组实例的find()和findInde