@Transactional與 @Async未生效

前言

本篇文章僅限于某個特殊未生效吐槽講解。

  • 其他常見未生效請移步其他文章

問題描述

  • 使用Shiro不謹(jǐn)慎造成的特殊Bug。

  • 僅僅只在一個用戶service中未生效。其余全部生效(環(huán)境多模塊不影響)

  • 測試了很多類,新建,刪除代碼。最終發(fā)現(xiàn)(自己未謹(jǐn)慎)竟然是某個未加入容器的類調(diào)用了用戶service竟然成功了;

@Slf4j
public class LoginRealm extends CustomRealm {
    
    @Autowired
    UserService userService;
    
    @Autowired
    RedisUtil redisUtil;

...

  • 查到原因才發(fā)現(xiàn),左邊小圖標(biāo)沒有(是未加入的標(biāo)志),可惡的是竟然運行成功(數(shù)據(jù)毫無問題,能取到Service的數(shù)據(jù),其他接口調(diào)用Service也是正常的),而且竟然沒報錯。(不要問繼承問題,可以自己去試試)
image.png
  • 大概原因就是這個類被重新實列化了。屬于Shiro的驗證領(lǐng)域(登錄時候去調(diào)用Service獲取用戶信息)。

  • 問題找到了就好解決了,吐槽吐槽,謹(jǐn)慎謹(jǐn)慎同時也是知識的匱乏

解決方案

  • 獲取service和redisUtil的單列。

    private static UserService instance;

    @PostConstruct
    public void build() {
        instance = this;
    }

    public static UserService getInstance() {
        return instance;
    }

ps

  • 這個LoginRealm被其他加入Spring容器實列化了(new),所以能找到值。

  • 這個問題造成了該模塊下事務(wù)和異步未生效。特此謹(jǐn)記!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容