`

quartz中参数misfireThreshold的详解

阅读更多

org.quartz.jobStore.misfireThreshold = 60000 #60秒  默认值

那么执行第一次作业是在10:01秒,这时会设定下一次的执行时间为10:02秒,要等一个作业执行完之后才有可用线程,大概要在10:11秒才能执行前面安排的应该在10:02执行的作业,这时就会用到misfireThreshold, 因为10:11与10:02之间的差值小于6000,所以执行该作业,并以10:02为基准设置下一次执行时间为10:03,这样造成每次实际执行时间与安排时间错位

 

如果 org.quartz.jobStore.misfireThreshold = 6000 #秒
同样,在10:11计划执行安排在10:02的作业,发现10:11与10:02之间的差值小于6000,那么直接跳过该作业,执行本应在当前时间执行的作业,这时候会以10:11为基准设定下次作业执行时间为10:12

 

misfireThreshold只有当job任务被阻塞时才有效,如果线程池里线程很多,该参数没有意义。所以大部分时候只对有状态的job才有意义。

 public class HelloJob implements StatefulJob {

 public void execute(JobExecutionContext context) {
  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();
  }

 }

}

 

执行次数:

SimpleTrigger trigger2 = new SimpleTrigger();
  trigger2.setName("trigger2");
  trigger2.setGroup("group");
  trigger2.setStartTime(new Date());

  trigger2.setRepeatInterval(2000);

  trigger2.setRepeatCount(4);

  sched.scheduleJob(job2, trigger2);

 

执行结果:

 60秒执行任务:
[DefaultQuartzScheduler_Worker-2] Now: 05:36:42 Scheduled: 05:36:42 Previous: 05:36:40 Next: 05:36:44
[DefaultQuartzScheduler_Worker-3] Now: 05:36:52 Scheduled: 05:36:44 Previous: 05:36:42 Next: 05:36:46
[DefaultQuartzScheduler_Worker-4] Now: 05:37:02 Scheduled: 05:36:46 Previous: 05:36:44 Next: 05:36:48
[DefaultQuartzScheduler_Worker-5] Now: 05:37:12 Scheduled: 05:36:48 Previous: 05:36:46 Next: 05:36:50

3秒执行任务:
[DefaultQuartzScheduler_Worker-2] Now: 05:41:36 Scheduled: 05:41:36 Previous: 05:41:34 Next: 05:41:38
[DefaultQuartzScheduler_Worker-3] Now: 05:41:46 Scheduled: 05:41:46 Previous: 05:41:36 Next: 05:41:48
[DefaultQuartzScheduler_Worker-4] Now: 05:41:56 Scheduled: 05:41:56 Previous: 05:41:46 Next: 05:41:58
[DefaultQuartzScheduler_Worker-5] Now: 05:42:06 Scheduled: 05:42:06 Previous: 05:41:56 Next: 05:42:08

 

所以说:misfireThreshold 参数对执行次数并无影响,只是对cpu对线程处理的机制(会影响效率)有所影响而已。

分享到:
评论
2 楼 wanmeinange 2013-10-21  
那如果无状态的。对同一个任务并发控制怎么做?比如继承QuartzJobBean类。实现executeInternal方法,这个方法是并发的。但是对同一个任务又不能并发。你不能在executeInternal方法里面做锁。只能在外面。但是外面是quartz本身去调用这个方法的。如果不用web,在main方法启动。还不能用拦截器。监听器之类的。怎么办?
1 楼 tianhandigeng 2013-04-03  
还是没明白

相关推荐

    quartz3种调度形式+传参.zip

    本资料主要探讨了Quartz的三种调度形式以及在Spring框架中的整合,并涉及了参数传递的相关知识。 一、Quartz的三种调度形式 1. 单纯的Quartz调度 在不依赖任何框架的情况下,直接使用Quartz API进行任务调度。...

    Quartz.NET 配置文件详解1

    以下是配置文件中的一些关键参数: 1. **quartz.scheduler.instanceName**:这个属性用于设定调度器的唯一标识,便于区分运行在同一系统中的多个 Quartz 实例。 2. **quartz.threadPool.type**:定义了线程池的...

    Quartz定时任务详解

    Quartz定时任务详解 Quartz 是一个功能齐全的开源作业调度系统,可以用于从最小的应用程序到大型企业系统。Quartz 非常灵活,包含多个可以单独或一起使用的使用范例,以实现您想要的行为,并使您能够以对您的项目最...

    Spring Quartz可变参数Trigger

    标签中的“动态设定参数”和“定时任务”进一步强调了Spring Quartz的灵活性。在实际应用中,这种动态调整的能力对于响应业务变化、实现灵活的定时任务管理至关重要。例如,我们可以根据系统负载、用户行为或其他...

    Quartz之CronExpression详解

    CronExpression是一种用于配置Quartz调度器中定时任务的表达式格式。通过这种格式化的字符串,用户能够灵活地定义任务执行的时间规律。CronExpression由六个或七个字段组成,各字段之间用空格分隔,具体包括秒、分、...

    quartz时间参数转换工具

    定时任务时间参数转换,cron表达式轻易转换,更易理解时间参数设置类型及转换含义

    Quartz中文教程学习

    Quartz是一个开源的作业调度框架,它允许Java开发者在应用程序中定义复杂的任务调度。Quartz中文教程学习资源对于初学者来说是非常有价值的,因为它可以帮助你快速理解这个强大的工具,并将其有效地应用到实际项目中...

    Quartz使用详解

    Quartz 使用详解 Quartz 是一个功能强大的作业调度器,可以帮助开发者实现复杂的任务调度和执行。下面是关于 Quartz 使用详解的知识点总结。 一、实例化 Scheduler 在使用 Quartz 之前, 必须使用 ...

    QuartzAPI中文chm

    QuartzAPI是一个强大的任务调度库,广泛用于Java应用程序中,以实现定时任务的自动化执行。这个"QuartzAPI中文chm"文档是专门为中文用户设计的学习资源,旨在帮助开发者快速理解和掌握Quartz的核心功能和使用方法。 ...

    完整quartz配置大全

     Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。  Quartz中有两个基本概念:作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度。

    java quartz详解

    ### Java Quartz 详解 #### 一、Quartz 概述 Quartz 是一款开源的作业调度框架,可以用来实现各种定时任务的需求。它提供了一种简单的方式来定义触发器(Trigger),用于设定作业(Job)何时运行。Quartz 的灵活性...

    关于spring中quartz的配置

    可以通过`quartz.properties`文件配置Quartz的一些全局参数,比如数据库连接、线程池大小等。例如: ``` org.quartz.scheduler.instanceName = MyScheduler org.quartz.jobStore.class = org.quartz.impl....

    quartz-2.3.0-API文档-中文版.zip

    赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    quartz-2.3.2-API文档-中文版.zip

    赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    spring整合Quartz框架过程详解

    Spring 整合 Quartz 框架过程详解 本文主要介绍了 Spring 整合 Quartz 框架的过程详解,通过示例代码对大家的学习或者工作具有参考学习价值。 一、Quartz 框架简介 Quartz 是一个完全由 Java 编写的开源任务调度...

    quartz-2.2.3版本的quartz初始化sql语句

    Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息...

    定时任务quartz及教程

    Quartz是Java领域中广泛应用的一款开源的作业调度框架,它允许开发者在应用程序中安排复杂的定时任务。本教程将深入探讨Quartz的核心概念、配置、API使用以及如何在实际项目中集成和管理定时任务。 一、Quartz核心...

    Quartz 手册中 文 版

    Quartz 是一个开源的作业调度框架,用于在 Java 应用程序中实现复杂的工作调度。它的设计目标是成为一个完全可插拔的作业调度系统,能够嵌入到任何使用 Java 的应用中,提供灵活且可靠的定时任务执行服务。Quartz 的...

    springboot中使用quartz

    在Quartz中,我们可以利用JobDataMap来传递参数。在创建Trigger时,我们可以将参数放入JobDataMap中: ```java Map, Object> jobDataMap = new HashMap(); jobDataMap.put("param1", "value1"); jobDataMap.put(...

    quartz quartz-1.8.6 dbTables 建表sql

    Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它提供了丰富的API和灵活性,使得开发者可以方便地定义、安排和管理各种任务。版本1.8.6是Quartz的一个稳定版本,它包含了对数据库...

Global site tag (gtag.js) - Google Analytics