Java Quarkus石英不';t在事务超时后重新启动作业

Java Quarkus石英不';t在事务超时后重新启动作业,java,quarkus,quartz,timeoutexception,Java,Quarkus,Quartz,Timeoutexception,我正在使用Quarkus和Quartz来安排一个作业,该作业将HttpRequests发送到外部API,并将响应数据保存到我的数据库中 这个作业在最后一个作业结束后重新启动,我使用@DisallowConcurrentExecution,所以一次只运行一个作业实例 我每个作业至少要执行100个异步请求,这有时可能需要很多时间。这些请求有时会触发事务超时,这会完全终止Quartz作业。 我试图捕获作业中的异常,但它被抛出到其他地方 我通过将quarkus.transaction manager.d

我正在使用Quarkus和Quartz来安排一个作业,该作业将HttpRequests发送到外部API,并将响应数据保存到我的数据库中

这个作业在最后一个作业结束后重新启动,我使用@DisallowConcurrentExecution,所以一次只运行一个作业实例

我每个作业至少要执行100个异步请求,这有时可能需要很多时间。这些请求有时会触发事务超时,这会完全终止Quartz作业。 我试图捕获作业中的异常,但它被抛出到其他地方

我通过将
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();
        }
    }
}