在springBoot与quartz 整合中 @Transaction 失效

Posted lijing1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在springBoot与quartz 整合中 @Transaction 失效相关的知识,希望对你有一定的参考价值。

   问题1::springBoot在与quartz 整合时,使用@Transaction 注解时事务失效

解决方案:创建一个类使用@Compent 被spring管理 ,使用@Transaction标识主要方法,然后使用quartz 的方法中调用这个类中的方法

问题2: 同一个类中,不加@Transaction注解的方法调用加@Transaction注解的方法  事务失效

问题产生的原因: spring 在扫描bean的时候会扫描方法上是否包含@Transaction注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的。此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用时增加异步作用。然而,如果这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,所以就没有增加事务作用,我们看到的现象就是@Transaction注解无效。

解决方案:将不需要事务管理的类抽离出来创建一个类,然后调用被事务管理的类方法

 

以上是关于在springBoot与quartz 整合中 @Transaction 失效的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现

SpringBoot 整合Quartz定时任务管理SpringBoot系列18

SpringBoot整合Quartz

springboot-01整合quartz

springboot整合quartz

quartz - springboot2.1.5 整合