java - 服务器关闭后 Quartz 作业重新触发

标签 java spring quartz-scheduler

最近我开始使用具有以下属性的 Quartz Persistent Job Store:

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

我已经在 spring 中使用基于 cron 的触发器定义了一个示例作业:

 <bean id="sampleCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
   <property name="jobDetail" ref="sampleJobDetail"/>
   <property name="cronExpression" value="0/5 * * * * ?"/>

我看到作业真的每 5 秒执行一次,一切都很好。 现在我停止程序,这是一个简单的控制台应用程序,没有 Web 容器或任何东西,等待 30 秒,然后重新运行我的程序。 我看到的是当调度程序启动时作业被触发了很多次。 例如,如果作业实现如下:

public class SampleJob implements Serializable, Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
    System.out.println("Executing the job Job  " + new Date());
}

重启后的输出是这样的:

 Executing the job Job  Mon Mar 31 08:34:18 IDT 2014
 Executing the job Job  Mon Mar 31 08:34:18 IDT 2014
 Executing the job Job  Mon Mar 31 08:34:18 IDT 2014

然后它每 5 秒再次运行一次。

 Executing the job Job  Mon Mar 31 08:34:20 IDT 2014
 Executing the job Job  Mon Mar 31 08:34:25 IDT 2014

....

在实际应用程序中,我将执行清理数据库的工作(当然它不会每 5 秒运行一次 :))但我确实计划有时服务器会重新启动并保持关闭状态一些时间,我希望这个作业在重启后只执行一次。有可能吗?

我正在使用具有以下配置的 SchedulerFactoyBean:

<bean id="quartzSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy">
    <property name="configLocation" value="classpath:scheduler-quartz.properties"/>
    <property name="quartzProperties" ref="qrtzProperties"/>
    <property name="autoStartup" value="true" />

    <property name="triggers">
        <list>             
            <ref bean="sampleCronTrigger"/>
        </list>
    </property>
</bean>

提前致谢

最佳答案

尝试在 sampleCronTrigger 上设置 misfire 指令:

   <property name="misfireInstructionName" value="MISFIRE_INSTRUCTION_DO_NOTHING"/>

这是一篇关于misfire instructions的大文章

关于java - 服务器关闭后 Quartz 作业重新触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754318/

相关文章:

java - Eclipse 程序未运行?

java - Quartz 实例应该只运行特定的作业,而不是全部

java - quartz API - 了解执行的作业

java - 这个类设计错了吗?

java - JBoss 7.1.1 是否与 EJB 2.1 完全兼容?

java - 无法使用 Selenium 和 Java 在 Mac OSX 中启动 Safari 12 浏览器

Spring :SQL 状态 [null];错误代码 [17004];列类型无效

java - 如何获取 JAR 文件中资源目录中的所有资源?

java - 配置内置 Jackson MapDeserializer

java - 设置org.springframework.scheduling.quartz.JobDetailBean的bean属性 'jobClass'