`
canonical
  • 浏览: 368059 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[导入]Quartz 任务调度

阅读更多

quartz是一个高质量的任务调度软件包。其主要组成部分为:

Scheduler接口: quartz的执行线程,它根据Trigger决定调度时刻,根据JobDetail的说明实例化并运行Job

JobDetail类: 可持久化的任务描述信息。任务虽然分组,但是仅用作管理标示,任务之间并无实质性关联, 例如无法定义job chain。

Trigger类:任务的调度策略。这里的特点是调度策略与任务描述分开,调度策略和任务描述都可以分别在Scheduler注册,然后再关联起来。JobDetail与Trigger的关系是一对多。

JobDataMap: 将任务的运行时可持久化状态信息从JobDetail类中分离出来

Job接口: 任务的执行代码

StatefulJob接口: 无状态任务对应的JobDataMap可以认为是只读的,而有状态的任务在多次执行过程中保留对JobDataMap所作的修改,一个后果是有状态任务无法被并发执行。

JobExecutionException类: 可以通过JobExecutionException调整调度程序的下一步动作
Calendar接口: 用于从trigger的调度计划中排除某些时间段,例如假期等。

以上几个部分的交互关系如下:
class JobImpl implements Job{
    public void execute(JobExecutionContext context) throws JobExecutionException{
        JobDetail detail = context.getJobDetail();
        JobDataMap dataMap = detail.getJobDataMap();
        ...
    }
}

scheduler.addCalendar("myHolidays", holidayCalendar, false);
trigger.setCanlendarName("myHolidays");

JobDetail jobDetail = new JobDetail(jobName, jobGroupName, JobImpl.class);

scheduler.scheduleJob(jobDetail, trigger);

JobDetail可以设置如下属性:
1. Durability: non-durable的任务当不再与任何active trigger关联的时候将会从scheduler中被自动删除。
2. Volatility: volatile的任务在scheduler的两次启动之间不会被持久化
3. RequestsRecovery: 如果在执行过程中程序意外崩溃,标记为"request recovery"的任务在scheduler重起之后将会被再次执行,此时JobExecutionContext.isRecovering()返回true.

Trigger可以设置如下属性:
1. misfireInstruction: 设定当trigger错过了触发时刻的时候需要采取的处理策略

SimpleTrigger按照固定的时间间隔进行触发
startTime, endTime, repeatCount, repeatInterval

CronTrigger按照日历间隔进行触发
seconds minutes hours day-of-month month day-of-week

在quartz内部,QuartzSchedulerThread按照时间顺序选择trigger(没有任务优先级的概念), 然后在JobRunShell中运行Job。

JobRunShell中的调用顺序如下:

TriggerListener.triggerFired
    Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed.

TriggerListener.vetoJobExecution
    Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed.

JobListener.jobToBeExecuted
    Called by the Scheduler when a JobDetail is about to be executed (an associated Trigger has occured).

Job.execute
    Called by the Scheduler when a Trigger fires that is associated with the Job.
 
JobListener.jobWasExecuted
    Called by the Scheduler after a JobDetail has been executed, and be for the associated Trigger's triggered(xx) method has

been called.

Trigger.executionComplete
    Called after the Scheduler has executed the JobDetail associated with the Trigger in order to get the final instruction

code from the trigger.

TriggerListener.triggerComplete
     Called by the Scheduler when a Trigger has fired, it's associated JobDetail has been executed, and it's triggered(xx)

method has been called.

SchedulerListener.triggerFinalized [if(trigger.getNextFireTime() == null)]
     Called by the Scheduler when a Trigger has reached the condition in which it will never fire again.
分享到:
评论

相关推荐

    任务调度框架Quartz

    Quartz 是一个功能强大且灵活的任务调度框架,广泛应用于各种企业应用中,例如定时清理系统垃圾文件、定时导入导出数据、定时发送邮件等等业务场景。Quartz 提供了高度可控的任务调度功能,能够满足大多数的调度需求...

    任务调度Quartz框 架

    【Quartz任务调度框架】 Quartz是一个开源的任务调度框架,非常适合初学者入门。它为Java开发者提供了一种高效且可控的方式来实现定时任务的调度。在各种企业应用中,任务调度的需求非常常见,例如定期清理系统垃圾...

    Quartz任务调度框架简介

    Quartz是一个开源的作业调度框架,它用于在Java应用程序中实现复杂的定时任务。Quartz的主要功能是安排作业(Job)在特定的时间点执行,这些作业可以是任何实现了Quartz接口的任务,比如数据处理、文件传输、邮件...

    任务调度Quartz框架

    【Quartz任务调度框架】 Quartz是一个开源的任务调度框架,专为Java应用程序设计,用于创建、管理和执行计划任务。在企业应用中,任务调度是非常常见且重要的需求,例如定期清理系统垃圾文件、定时导入导出数据、...

    Spring quartz 定时任务调度

    通过在Spring的配置文件中定义bean,可以轻松地将Quartz任务纳入Spring的管理范围。 3. **中文注解** 在项目中使用中文注解有助于中国开发者的理解和使用,这使得代码更易读,特别是对于那些不熟悉英文文档的...

    任务调度器实例

    总的来说,Quartz任务调度器实例提供了一个实践平台,帮助开发者学习和掌握如何在Java应用中实现定时任务,提升系统自动化水平,提高效率。通过研究和实践,你可以将这些知识应用到实际项目中,解决各种定时任务的...

    spring的三种任务调度实现方式lib

    Spring提供了三种主要的任务调度实现方式:Spring内置的任务调度器(TaskScheduler),Quartz Scheduler,以及Spring Batch。下面我们将详细介绍这三种方式。 1. Spring内置的任务调度器(TaskScheduler) Spring...

    Spring Quartz 调度器

    在pom.xml文件中添加对应的Maven坐标,确保能正确导入Quartz和Spring的库。 接下来,我们需要配置Spring的上下文文件。在applicationContext.xml中,定义一个SchedulerFactoryBean,这是Spring提供的用于管理Quartz...

    用 quartz 调度定时工作

    ### 使用 Quartz 进行定时任务调度 #### 一、Quartz 概述 Quartz 是 OpenSymphony 项目中的一个子项目,它提供了一套强大的调度功能,可以在 J2EE 环境下或者独立环境中运行。Quartz 的设计目标是成为一个全能型的...

    quartz-2.2.1 最新包

    通过以上介绍,我们可以看到Quartz 2.2.1在Java任务调度领域的强大功能和灵活性。开发者可以根据实际需求,利用其丰富的API和配置选项来创建、管理和监控各种定时任务,提升系统的自动化水平和效率。

    定时任务完整案例 Java quartz

    【标题】"定时任务完整案例 Java quartz" 涉及的核心技术是Java的调度库Quartz,它是一个开源的工作调度框架,广泛应用于企业级应用中,用于执行定时任务。Quartz能够帮助开发者创建、调度和执行任务,实现高度灵活...

    quartz2.2.1jar.zip

    Quartz是一个开源的作业调度框架,它为Java应用程序提供了强大的任务调度能力。在Java开发中,Quartz常被用于执行周期性的任务,如发送邮件、数据同步、清理日志等。"quartz2.2.1jar.zip"是一个包含Quartz库版本...

    数据库管理quartz定时任务

    Quartz与数据库的结合,使得任务调度更稳定、可持久化,避免了服务器重启导致的调度信息丢失。 1. **Quartz简介** - Quartz是Java平台上的一个全功能的作业调度框架,由Cactus Software公司开发,后来成为...

    quartz定时任务Demo,直接可运行

    - 在Eclipse中,你需要导入Quartz的相关库,并创建一个Java项目,然后将Demo代码粘贴进去。 - 配置项目的类路径,确保包含Quartz的jar文件。 - 编译并运行`main`方法,启动Scheduler,定时任务就会按照设定开始...

    Spring-quartz计划任务

    Quartz是一个开源的作业调度框架,可以用来在指定的时间执行特定的任务。而Spring框架则提供了对Quartz的集成,使得我们可以方便地在Spring应用中配置和管理定时任务。 在Spring中使用Quartz,首先需要引入相关的...

    定时任务使用的jar,导入即用

    在本案例中,提供的"定时任务使用的jar,导入即用"是一个预封装好的库,特别适用于快速实现定时任务功能。这个jar包基于"quartz"框架,quartz是Java领域广泛使用的开源作业调度框架。 Quartz的核心概念包括: 1. **...

    Quartz-1.8.4官方

    Quartz是一款广泛应用于Java平台的开源任务调度框架,它的核心功能是实现定时任务的调度。在1.8.4这个版本中,用户可以获取到官方的原始代码、编译后的jar包以及官方提供的示例,这为开发者提供了深入理解Quartz工作...

    spring实现任务的自动调度所需的jar包

    Quartz是一个流行的任务调度库,被广泛用于Java应用程序中,包括Spring项目。在本篇中,我们将深入探讨如何使用Spring结合Quartz来实现任务的自动调度,以及所需的jar包。 首先,我们要理解Spring的Task Execution...

    quartz.jar包下载

    1. **灵活的调度**:Quartz提供了非常灵活的任务调度能力。你可以定义任务执行的精确时间,如每分钟、每天、每周等,也可以设置复杂的定时规则,如基于Cron表达式。 2. **可扩展性**:Quartz支持多线程和分布式环境...

    Spring quartz1.6.jar(java定时任务)

    - 创建Spring配置文件,导入Quartz相关的bean定义,如`SchedulerFactoryBean`,它负责初始化和管理Quartz的Scheduler实例。 - 配置`ThreadPool`和`JobStore`,以定义线程池大小和任务存储方式。 - 可以选择性地...

Global site tag (gtag.js) - Google Analytics