SSM + QUARTZ 事务回滚异常处理

SSM集成Quartz时,发现在定时任务中使用@Transactional注释报错,采用了业务类与定时任务类分离的方法,仍无法解决。于是在定时任务类里自定义了事务,解决。

public class QuartzSample extends QuartzJobBean {

   @Autowired
   private QuartzSampleSrv sampleSrv;

   @Autowired
   private ApplicationContext applicationContext;

   Logger logger = LogManager.getLogger();
   
   int excuteTimes = 0;

   @Override
   public void executeInternal(JobExecutionContext context) throws JobExecutionException {

      DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) applicationContext.getBean("transactionManager");
      DefaultTransactionDefinition def = new DefaultTransactionDefinition();
      def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
      TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态

      try {
         //SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
         sampleSrv.doJob();
         transactionManager.commit(status);
      }
      catch (Exception e) {
         System.out.println(e.getMessage());
         logger.trace(e.getMessage());
         transactionManager.rollback(status);
      }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值