0

私はGuiceアプリケーションでQuartz Schedulerを使用しています.Webサービスを呼び出す必要がある非常に単純なジョブで、データベースの応答更新行に基づいています。ここでの問題は、サービス メソッドが Quartz ジョブから呼び出されたときに、トランザクションがスキップされるか、コミットされないことです。少なくとも、それは私の疑問の 1 つです。そのため、メソッドが Quartz ジョブの外部で呼び出された場合にのみ、行が更新されます。使用しているDBはmysqlです。

これが Quartz.properties ファイルからの私の Quartz 構成です。

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();
  }
}
4

0 に答える 0