美文网首页
差点中招-事务失效

差点中招-事务失效

作者: M_lear | 来源:发表于2023-04-15 10:14 被阅读0次

一个spring bean中的方法加了Transactional注解,spring会为这个bean实例再创建一个代理对象,代理对象持有这个bean的引用。
当其他对象需要注入这个spring bean时,实际上注入的是这个bean的代理对象,这样spring事务就会生效。

差点中招

@Component
public class A {
    @Scheduled(fixedRate = 3000)
    public void doJob() {
        handleExpiredOrder();
    }

    @Transactional(rollbackFor = Exception.class)
    void handleExpiredOrder() {
    }
}

上面这段代码的意图是,创建一个3s运行一次的spring定时任务,这个定时任务去调用被Transactional注解修饰的handleExpiredOrder方法。
这种情况spring事务是不会生效的,因为doJob调用的是A实例的handleExpiredOrder方法,而不是A实例代理对象的handleExpiredOrder方法。

应该这样

@Component
public class OrderService {
    @Transactional(rollbackFor = Exception.class)
    public void handleExpiredOrder() {
    }
}

@Component
public class A {
    @Autowired
    private OrderService orderService;

    @Scheduled(fixedRate = 3000)
    public void doJob() {
        orderService.handleExpiredOrder();
    }
}

把事务代码移到一个单独的类中,通过spring注入的对象调用事务方法。

相关文章

  • 事务相关的问题总结

    一、事务回滚问题 二、事务失效问题 三、事务失效的解决办法 方式一:自己手动创建事务,提交事务,回滚事务(Spri...

  • springboot事务失效解决-TransactionAspe

    事务失效解决 一 失效原因和写法(同一个类,controller调用有事务的方法) 一 事务生效解决(调用事务的...

  • 事务失效

    一.我碰到的事务失效的可能原因: (1)由于采用的是SpringMVC、 MyBatis,故统一采用了标注来声明S...

  • 锁库存,分布式事务

    分布式事务:网络问题+分布式机器 mysql默认级别可重复度 本地事务失效问题 同一个对象内事务方法互调默认失效,...

  • 内部调用引起Spring声明式事务@Transactional失

    失效的原因 Spring声明式事务是基于AOP生成的代理类来实现的,而AOP无法拦截内部调用,导致事务失效。 解决...

  • StringBoot 事务失效

    事物失效的几种场景 数据库不支持事务 注解放在了私有方法上 类内部调用 未捕获异常 多线程场景 传播属性设置问题 ...

  • springboot事务失效

    事务不生效 访问权限问题众所周知,java的访问权限主要有四种:private、default、protected...

  • Spring事务什么时候会失效

    Spring事务什么时候会失效? Spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不...

  • 差点中招

    有些时间人在不经意间,就会被毒鸡汤毒住,然后不再努力,一辈子就浑浑噩噩的渡过了,太可怕了。 所以,人必须时刻都要保...

  • 差点就中招

    小红告诉我,苏州采芝斋有一款陈皮杨梅特别好吃,每次去苏州必买。 我们吴江虽然也有采芝斋分店,但是苏州观前街的总店,...

网友评论

      本文标题:差点中招-事务失效

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