Java Quarkus石英不';t在事务超时后重新启动作业
我正在使用Quarkus和Quartz来安排一个作业,该作业将HttpRequests发送到外部API,并将响应数据保存到我的数据库中 这个作业在最后一个作业结束后重新启动,我使用@DisallowConcurrentExecution,所以一次只运行一个作业实例 我每个作业至少要执行100个异步请求,这有时可能需要很多时间。这些请求有时会触发事务超时,这会完全终止Quartz作业。 我试图捕获作业中的异常,但它被抛出到其他地方 我通过将Java Quarkus石英不';t在事务超时后重新启动作业,java,quarkus,quartz,timeoutexception,Java,Quarkus,Quartz,Timeoutexception,我正在使用Quarkus和Quartz来安排一个作业,该作业将HttpRequests发送到外部API,并将响应数据保存到我的数据库中 这个作业在最后一个作业结束后重新启动,我使用@DisallowConcurrentExecution,所以一次只运行一个作业实例 我每个作业至少要执行100个异步请求,这有时可能需要很多时间。这些请求有时会触发事务超时,这会完全终止Quartz作业。 我试图捕获作业中的异常,但它被抛出到其他地方 我通过将quarkus.transaction manager.d
quarkus.transaction manager.default transaction timeout
设置为一个非常小的值,成功地复制了该问题,但我不知道在超过事务超时限制后如何重新启动作业。有什么想法吗
是的,我知道我可以将超时设置为非常大的值,但我更希望作业失败并重新启动
Quartz计划程序设置
@ApplicationScoped
public class MyScheduler {
@Inject
Scheduler quartz;
void onStart(@Observes StartupEvent event) throws SchedulerException {
JobDetail job = JobBuilder.newJob(MyJob.class)
.withIdentity("Job", "group")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("Trigger","group")
.startNow()
.withSchedule(
SimpleScheduleBuilder
.simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever()
)
.build();
quartz.scheduleJob(job, trigger);
}
}
MyJob.class:
@DisallowConcurrentExecution
@ApplicationScoped
public class MyJob implements Job {
@Inject
EntityManager em;
@Transactional
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
getData();
} catch(Throwable e) {
e.printStackTrace();
}
}
}