Kun*_*nal 1 java jobs spring quartz-scheduler
我有一个 CronExpression 设置为每 30 分钟执行一次作业。但如果之前的工作未完成,我需要跳过特定的工作。
例如。我有 100 名员工的姓名需要在数据库中更新,我将其称为“Job1”,从上午 10 点开始。现在的情况就像“Job1”正在处理中,当我有另一项工作“Job2”时,我需要更新另外 50 名员工的姓名。我的问题是这样的,我需要跳过“Job2”和其他作业,直到我当前运行的作业完成。
<bean name="employeeNameUpdateJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="name" value="Employee Update Job"/>
<property name="group" value="Employee Update Group Job"/>
<property name="jobClass"
value="com.emp.scheduler.EmployeeUpdateScheduler" />
<property name="volatility" value="false" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="name" value="Employee Update Trigger"/>
<property name="group" value="Employee Update Group Trigger"/>
<property name="volatility" value="false" />
<property name="jobDetail" ref="employeeNameUpdateJob"/>
<property name="cronExpression" value="0 0/30 * * * ?"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
一种方法是实现TriggerListener接口,该接口提供了vetoJobExecution(Trigger trigger, JobExecutionContext context)否决下一个作业执行的方法。从该方法返回true将停止作业的执行。
接口文档:http://quartz-scheduler.org/api/2.0.0/org/quartz/TriggerListener.html#vetoJobExecution (org.quartz.Trigger , org.quartz.JobExecutionContext)
样本:
//SampleTriggerListener.java
public class SampleTriggerListener implements TriggerListener {
@Override
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext ctx) {
if(!previousJobCompleted)
return true;
return false;
}
}
//Main.java
//init jobs, trigger & scheduler
this.scheduler.addTriggerListener(new SampleTriggerListener());
this.scheduler.start();
Run Code Online (Sandbox Code Playgroud)