@Transactional与 @Async未生效

前言

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

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

问题描述

  • 使用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),所以能找到值。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容