如何确定石英作业是否已暂停

问题描述

在Spring Boot应用程序中,我使用Quartz org.quartz.Scheduler来安排作业:

final JobDetail job = JobBuilder.newJob().ofType(ReportSendingJob.class)
    .storeDurably()
    .withIdentity("myJob")
    .build();

final crontrigger trigger = TriggerBuilder.newTrigger().forJob(job)
    .withIdentity(scheduleName)
                .withSchedule(CronScheduleBuilder.cronSchedule(schedule.getCronExpression()).withMisfireHandlingInstructionDonothing())
                .build();

scheduler.scheduleJob(job,trigger);

然后我暂停了它:

scheduler.pauseJob(new JobKey("myJob"));

如何获取此作业的状态以查看其是否暂停?

解决方法

pauseJob方法的文档说

使用给定的键暂停JobDetail-通过暂停其所有当前触发器。

因此,您可以通过检查所有触发器是否都暂停来检查作业是否暂停:

List<Trigger> triggers = scheduler.getTriggersOfJob(JobKey.jobKey("myJob"))

boolean paused = triggers
    .stream()
    .allMatch( trigger -> 
        scheduler.getTriggerState(trigger.key) == PAUSED 
    )