Quartz + Guice似乎跳过了事务

时间:2013-05-15 21:43:22

标签: java mysql quartz-scheduler guice transactional

我在我的Guice应用程序中使用Quartz Scheduler,用于一些非常简单的工作,应该调用一些Web服务,并基于数据库中的响应更新行。我在这里遇到的问题是,当从Quartz作业调用服务方法时,事务被跳过或未被提交,至少这是我的一个疑问。因此只有在Quartz Job外部调用方法时才会更新行。 我使用的数据库是mysql。

这是我的石英配置 quartz.properties文件。

org.quartz.scheduler.instanceName = RefundScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadPriority = 5
org.quartz.scheduler.skipUpdateCheck = false

代码示例:

@Transactional
public class MyService{
     @Inject    
     private RequestDao requestDao;
     @Inject
     private ResponseDao responseDao;

     @Inject
     private WebService webService;


     public void refund(){
         List<RequestEntity> requestEntity = dao.findAllForRefunding();
         for(RequestEntity requestEntity : requestEntity){
              ResponseEntity entity = webService.refund(requestEntity);
              dao.update(entity);
         }
      }
}
public class RefundJob implements Job{

    @Inject
    private MyService service;


    public void execute(JobExecutionContext jobExecutionContext) {
      service.refund();
  }
}

0 个答案:

没有答案