我在我的 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();
}
}