配置定时任务参数
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:
org.quartz.threadPool.threadPriority:
设置临界时间为6秒
org.quartz.jobStore.misfireThreshold:
 
设置任务每个5秒执行一次job.properties
job.xxx.class=com.uelink.dkapi.job.RemindJob
job.xxx.group=default
job.xxx.id=
job.xxx.cron=*/ * * * * ?
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( * ); } catch (InterruptedException e) {
e.printStackTrace();
}
System.err.println("线程休眠结束时间:"+df.format(new Date(System.currentTimeMillis())));
} }
 
产生错失情况
条件
org.quartz.jobStore.misfireThreshold时间6秒
每隔5秒执行一次,
一次执行10秒
 
结果为
Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::
查看上面的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: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::

Now: :: Scheduled: :: Previous: :: Next: ::
所有的定时任务都会被执行,知道超出临界时间为止
第一次任务原本开始时间和任务真正开始时间差为0
第二次5
第三次10
第四次15
需要在13次才能达到60,才会产生错失情况。
 
 
如果我们每隔一天才执行一次时,由于任务执行时间远远小于两次任务的时间间隔,不会产生错失情况,不需要担心定时任务没有执行的意外。只需要设置这个临界时间为60秒即可。
而且一般情况下都是多线程执行定时任务,不会因为定时任务阻塞产生错失策略。不需要关心这个参数设置
 

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

  1. Quartz配置

    1. Quartz主要配置 属性名称 是否必选 类型 默认值 说明 org.quartz.scheduler.instanceName 否 String QuartzScheduler Schedul ...

  2. Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置 >>>>>>>>>>>>&g ...

  3. spring通过配置xml文件集成quartz定时器

    概述 Spring为创建Quartzde Scheduler.Trigger和JobDetail提供了方便的FactoryBean类,以便能够在Spring容器中享受注入的好处. 此外,Spring还 ...

  4. spring quartz 配置多个定时任务

    1.配置文件-quartz-1.7.3jar   spring版本为3.1.3jar <?xml version="1.0" encoding="UTF-8&quo ...

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

    1.新增pom依赖 除了按照<quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0>添加依赖之外,pom.xml里新增加依赖: <dependency> ...

  6. Spring-----定时任务Quartz配置

    第一种,作业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean. 第一步:定义作业类 import org.quartz.Job ...

  7. Quartz.NET总结(三)Quartz 配置

    前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config.quartz_jobs.xml.lo ...

  8. spring多个定时任务quartz配置

    spring多个定时任务quartz配置 <?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.spring ...

  9. Quartz 配置文件属性

    主要配置 Property Name Req'd Type Default Value org.quartz.scheduler.instanceName no string 'QuartzSched ...

随机推荐

  1. Admin注册和路由分发详解

    Admin注册和路由分发详解 1.启动 #autodiscover_modules('admin', register_to=site) 2.注册 1.单例对象 admin.site = AdminS ...

  2. 写一份简单的webpack2 的配置文件,无比简单

    这是一份自己用到的webpack2的配置写法,从看webpack2开始,发现自己越来越懒了,现在html文件都不想自己写了,直接自己生成... 哈哈,这次是可以无比完美的导入css啦 开发的时候在命令 ...

  3. Python之RabbitMQ的使用

    今天总结一下Python关于Rabbitmq的使用 RabbitMQ官网说明,其实也是一种队列,那和前面说的线程queue和进程queue有什么区别呢? 线程queue只能在同一个进程下进行数据交互 ...

  4. 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理

    <C#从现象到本质>读书笔记(五)第5章字符串 字符串是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串的只并不会改变,而引用类型无论是按值传递还是 ...

  5. httpd安装与配置(编译安装)

    httpd简介 httpd是Apache超文本传输协议(HTTP)服务器的主程序.被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池. 通常,httpd不应该被直接调用,而应该在类 ...

  6. Navicat导入.xls等文件失败

    一.问题 在学习django的models时,使用Navicat premium导入.xls数据的时候会出现导入失败的原因,即使是换成了csv文件也是失败的,原因是数据库的表有外键,而需要设置外键限制 ...

  7. css变换transform 以及 行内元素的一些说明

    变换transform的用法比较简单:[变换其实和普通的css属性,如color等没什么区别,可以为变换应用过渡或动画,就像其他普通css属性一样]#test { transform: transla ...

  8. php判断语句

    编写代码时,可以为不同的情况执行不同的动作.可以使用判断条件语句来实现. if...else...elseif 例子一: <?php $t=date("H"); if ($t ...

  9. 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇

    error: Failed dependencies: MySQLconflicts   错误提示: error: Failed dependencies:                       ...

  10. canvas 旋转

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...