美文网首页
@Transactional与 @Async未生效

@Transactional与 @Async未生效

作者: 板栗炖牛肉 | 来源:发表于2021-05-14 11:05 被阅读0次

    前言

    本篇文章仅限于某个特殊未生效吐槽讲解。

    • 其他常见未生效请移步其他文章

    问题描述

    • 使用Shiro不谨慎造成的特殊Bug。

    • 仅仅只在一个用户service中未生效。其余全部生效(环境多模块不影响)

    • 测试了很多类,新建,删除代码。最终发现(自己未谨慎)竟然是某个未加入容器的类调用了用户service竟然成功了;

    @Slf4j
    public class LoginRealm extends CustomRealm {
        
        @Autowired
        UserService userService;
        
        @Autowired
        RedisUtil redisUtil;
    
    ...
    
    
    • 查到原因才发现,左边小图标没有(是未加入的标志),可恶的是竟然运行成功(数据毫无问题,能取到Service的数据,其他接口调用Service也是正常的),而且竟然没报错。(不要问继承问题,可以自己去试试)
    image.png
    • 大概原因就是这个类被重新实列化了。属于Shiro的验证领域(登录时候去调用Service获取用户信息)。

    • 问题找到了就好解决了,吐槽吐槽,谨慎谨慎同时也是知识的匮乏

    解决方案

    • 获取service和redisUtil的单列。
    
        private static UserService instance;
    
        @PostConstruct
        public void build() {
            instance = this;
        }
    
        public static UserService getInstance() {
            return instance;
        }
    
    

    ps

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

    • 这个问题造成了该模块下事务和异步未生效。特此谨记!

    相关文章

      网友评论

          本文标题:@Transactional与 @Async未生效

          本文链接:https://www.haomeiwen.com/subject/lofqjltx.html