quartz配置参数org.quartz.jobStore.misfireThreshold含义解释

配置定时任务参数

quartz.properties文件时

需要配置jobStore的超过时间数

默认为60秒(这里单位为毫秒)

org.quartz.jobStore.misfireThreshold = 60000

这个参数一般在多线程池条件下无效。

产生misfire失败的条件:

单线程执行定时任务

第一个任务的执行完后的结束时间 减去 第二个任务的开始时间 = 时间间隔

时间间隔 大于 60s时, 第二个任务不会被执行。

这个叫做失败临界值,或者临界时间

例如

设置quartz.properties

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 1
org.quartz.threadPool.threadPriority: 5
设置临界时间为6秒
org.quartz.jobStore.misfireThreshold: 6000

设置任务每个5秒执行一次job.properties

job.xxx.class=com.uelink.dkapi.job.RemindJob
job.xxx.group=default
job.xxx.id=1
job.xxx.cron=*/5 * * * * ?
job.xxx.enable=true

注意:xxx表示名字随意取

在定时任务中编写延迟RemindJob.java

休眠10秒,相当于任务执行时间为10s

public class RemindJob implements Job{

      @Override
      public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("微信小程序定时提醒通知开始");
            DateFormat df = new SimpleDateFormat("hh:mm:ss");
              System.err.println("[" + Thread.currentThread().getName() + "] Now: "
                + df.format(context.getFireTime()) + " Scheduled: "
                + df.format(context.getScheduledFireTime()) + " Previous: "
                + df.format(context.getPreviousFireTime()) + " Next: "
                + df.format(context.getNextFireTime()));
            try {
                  Thread.sleep(10 * 1000);

            } catch (InterruptedException e) {
                  e.printStackTrace();
            }
            System.err.println("线程休眠结束时间:"+df.format(new Date(System.currentTimeMillis())));
      }

}

产生错失情况

条件

org.quartz.jobStore.misfireThreshold时间6秒

每隔5秒执行一次,

一次执行10秒

结果为

Now: 06:22:20 Scheduled: 06:22:20 Previous: 06:22:15 Next: 06:22:25

Now: 06:22:30 Scheduled: 06:22:25 Previous: 06:22:20 Next: 06:22:30

Now: 06:22:40 Scheduled: 06:22:40 Previous: 06:22:25 Next: 06:22:45

Now: 06:22:50 Scheduled: 06:22:45 Previous: 06:22:40 Next: 06:22:50

Now: 06:23:00 Scheduled: 06:23:00 Previous: 06:22:45 Next: 06:23:05

查看上面的Scheduled,是定时任务原本执行的时间。

第一个22:20, 第二个22:25, 第三个22:30, 第四个22:35,第五个22:40,第六个22:45,第七个22:50

第二个

30-25=5<6,认为没有产生错失。执行第二个

第三个25到40

40-30>6 ,产生错失,不执行第三个。

第四个原本是35,不知道是不是因为第三个发生错失后,小于40的任务都不执行,第四个被略过。

22:40直接执行第五个

第六个

40-45=5<6 ,没有措施,执行第六个

第七个22:50,

23:00-22:50=10>6产生错失,第六个不执行,第七个22:55不执行

第八个执行

当我们设置临界时间为60秒时。

条件

org.quartz.jobStore.misfireThreshold时间60秒

每隔5秒执行一次,

一次执行10秒

结果

Now: 06:05:25 Scheduled: 06:05:25 Previous: 06:05:20 Next: 06:05:30

Now: 06:05:35 Scheduled: 06:05:30 Previous: 06:05:25 Next: 06:05:35

Now: 06:05:45 Scheduled: 06:05:35 Previous: 06:05:30 Next: 06:05:40

Now: 06:05:55 Scheduled: 06:05:40 Previous: 06:05:35 Next: 06:05:45

Now: 06:06:05 Scheduled: 06:05:45 Previous: 06:05:40 Next: 06:05:50

所有的定时任务都会被执行,知道超出临界时间为止

第一次任务原本开始时间和任务真正开始时间差为0

第二次5

第三次10

第四次15

需要在13次才能达到60,才会产生错失情况。

如果我们每隔一天才执行一次时,由于任务执行时间远远小于两次任务的时间间隔,不会产生错失情况,不需要担心定时任务没有执行的意外。只需要设置这个临界时间为60秒即可。

而且一般情况下都是多线程执行定时任务,不会因为定时任务阻塞产生错失策略。不需要关心这个参数设置

原文地址:https://www.cnblogs.com/gne-hwz/p/10371534.html

时间: 2024-11-07 01:47:41

quartz配置参数org.quartz.jobStore.misfireThreshold含义解释的相关文章

Mysql配置参数常见问题

Mysql安装时进行初始化安装,最长碰到的问题就是配置参数兼容性的问题,因为数据库的参数发生改变,导致数据库无法识别的情况很让人头疼,好在有官方文档的指引,才能解决这类问题的发生 当前广泛应用的是mysql5.5以上版本,这里以5.6为例,一下包含了所有mysql5.6在使用的参数: http://dev.mysql.com/doc/refman/5.6/en/mysqld-option-tables.html 比如如下的报错: [Warning] TIMESTAMP with implicit

Quartz配置

1. Quartz主要配置 属性名称 是否必选 类型 默认值 说明 org.quartz.scheduler.instanceName 否 String QuartzScheduler Schedule调度器的实体名字 org.quartz.scheduler.instanceId 否 String NON_CLUSTERED Schedule调度器的实体的Id,必须唯一.1. 当你想生成intanceId的时候可以设置为AUTO2. 当你想从系统属性org.quartz.scheduler.i

quartz2.3.0(十)xml配置方式定义quartz定时任务

1.新增pom依赖 除了按照<quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0>添加依赖之外,pom.xml里新增加依赖: <dependency> <groupId>opensymphony</groupId> <artifactId>quartz-all</artifactId> <version>1.6.3</version> </dependency> <d

Quartz.NET总结(三)Quartz 配置

本来来源:http://www.cnblogs.com/zhangweizhong/p/4894354.html 前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config.quartz_jobs.xml.log4net.config.其中quartz.config是基本的配置, quartz_jobs.xml是相关的job 任务配置文件,log4net.config则是日志记录的配置. 1.

quartz 配置运行

这篇文章是对quartz 2.2.1进行配置 分为spring 整合版本和QuartzInitializerServlet整合版本 首先是QuartzInitializerServlet整合版本 主要是参考下面这篇博客 http://liuzidong.iteye.com/blog/1149537 和官网教程 http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/ 和API文档 http://www.quartz

Spring使用Quartz配置调度事务

首先编写服务类: package QuartzTest; import java.util.Date; public class CourseService {    public void start(){        System.out.println(new Date().getSeconds());    } } 编写调度类,需要继承QuartzJobBean : package QuartzTest; import org.quartz.JobExecutionContext; i

Spring结合java Quartz配置实例代码

原文:Spring结合java Quartz配置实例代码 源代码下载地址:http://www.zuidaima.com/share/1787232442715136.htm 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务.对于一个典型的MIS系统来说,在每月1号凌晨统计上个月各部门的业务数据生成月报表,每半个小时查询用户是否已经有快到期的待处理业务--,这样的例子俯拾皆是,不胜枚举.

[转帖]NM_CONTROLLED的含义以及网卡配置参数

NM_CONTROLLED的含义以及网卡配置参数 https://blog.csdn.net/z1014347942/article/details/78069966 学习一下 其实可以手工修改的. 不用非得GUI的方式来处理 static 的ip地址. 今天有两台服务器需机房需要切割,按机房的要求修改完ip.网关.以及掩码后,服务器就连不上了.查看ifcfg-eth0时发现这么一行: 1 NM_CONTROLLED="yes" Google了一下,网上说NM_CONTROLLED是n

java 定时器的几种实现方式以及 配置参数的说明

2.java中常见的定时器 1)借助Java.util.Timer来实现 2)OpenSymphony社区提供的Quartz来实现 3.介绍Timer 利用Timer开发定时任务是主要分为两个步骤: 1)创建定时任务类 示例代码: package org.lzstone.action import java.util.TimeTask public class LzstoneTimeTask extends TimeTask{ public void run(){ //执行的定时器任务 } }