Quartz是一个开源的作业调度框架,完全由java写的,你能通过它创建简单或者复杂的任务。他能提供巨大的灵活性,但又不牺牲简单性。
Quartz的核心概念 :调度器、触发器、作业
调度器(Scheduler)
Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。
要创建一个作业并能够被触发调用,必须在Scheduler上面注册一个JobDetail和Trigger。
Scheduler提携了所有Trigger和JobDetail,使它们协调工作。这些Trigger和JobDetail通过自身的name和group属性区分。
Scheduler 由SchedulerFactory产生,我们可以通过以下方式获取Scheduler的实例:
//从ServletContext上下文中查找SchedulerFactory
SchedulerFactory factory = (SchedulerFactory)
ServletActionContext.getServletContext().getAttribute("org.quartz.impl.StdSchedulerFactory.KEY");
//获取Scheduler对象
Scheduler defScheduler = factory.getScheduler();
作业
Job
任务,其实就是一个接口。要创建一个任务,必须得实现这个接口。该接口只有一个execute方法,任务每次被调用的时候都会执行这个execute方法的逻辑。
public class TestJob impletemens org.quartz.Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException{
// you business logic
// …
System.out.println("########### this is testJob running ############");
}
}
JobDetail
JobDetail 用来保存我们作业的详细信息。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail。下面是JobDetail的一些常用的属性和含义
参数名
|
类型
|
备注
|
name
|
String
|
任务的名称,必须
|
group
|
String
|
任务所在组,默认为DEFAULT
|
jobClass
|
Class
|
任务的实现类,必须
|
description
|
String
|
描述
|
jobDataMap
|
JobDataMap
|
用来给作业提供数据支持的数据结构
|
volatility
|
Boolean
|
重启应用之后是否删除任务的相关信息,默认false
|
durability
|
Boolean
|
任务完成之后是否依然保留到数据库,默认false
|
shouldRecover
|
Boolean
|
应用重启之后时候忽略过期任务,默认false
|
jobListeners
|
Set
|
监听器
|
JobDataMap
这是一个给作业提供数据支持的数据结构,使用方法和java.util.Map一样,非常方便。当一个作业被分配给调度器时,JobDataMap实例就随之生成。
Job有一个StatefulJob子接口,代表有状态的任务,该接口是一个没有方法的标签接口,其目的是让Quartz知道任务的类型,以便采用不同的执行方案。无状态任务在执行时拥有自己的JobDataMap拷贝,对JobDataMap的更改不会影响下次的执行。而有状态任务共享共享同一个JobDataMap实例,每次任务执行对JobDataMap所做的更改会保存下来,后面的执行可以看到这个更改,也即每次执行任务后都会对后面的执行发生影响。
正因为这个原因,无状态的Job可以并发执行,而有状态的StatefulJob不能并发执行,这意味着如果前次的StatefulJob还没有执行完毕,下一次的任务将阻塞等待,直到前次任务执行完毕。有状态任务比无状态任务需要考虑更多的因素,程序往往拥有更高的复杂度,因此除非必要,应该尽量使用无状态的Job。
如果Quartz使用了数据库持久化任务调度信息,无状态的JobDataMap仅会在Scheduler注册任务时保持一次,而有状态任务对应的JobDataMap在每次执行任务后都会进行保存。
JobDataMap实例也可以与一个触发器相关联。这种情况下,对于同一作业的不同触发器,我们可以在JobDataMap中添加不同的数据,以便作业在不同时间执行时能够提供更为灵活的数据支持(学校上午放眼保健操录音第一版,下午放第二版)。
不管是有状态还是无状态的任务,在任务执行期间对Trigger的JobDataMap所做的更改都不会进行持久,也即不会对下次的执行产生影响。
分享到:
相关推荐
通过灵活的配置,Quartz能够满足大部分定时任务的需求,且易于扩展和维护。不过,需要注意的是,随着任务数量的增加,调度器的性能和内存消耗也会上升,因此在大型系统中需要合理规划和优化任务调度。
6. **集群支持**:Quartz可以配置在多台服务器上运行,形成一个集群,这样可以提高系统的可用性和容错性。当一台服务器出现问题时,其他服务器可以接管任务。 7. **API友好**:Quartz提供了简单易用的API,使得...
Quartz是Java领域的一款强大的开源任务调度框架,广泛应用于各种基于Java的应用系统中,用于执行定时任务。在SpringBoot框架中,Quartz可以方便地集成,实现应用的定时任务管理。"quartz-2.3.0-distribution.zip"这...
通过JobDetail来配置Job的属性,如Job的名称、组别、数据绑定等。 2. **Trigger**: 触发器决定了Job的执行时间。Quartz提供了多种Trigger类型,如SimpleTrigger(简单触发器)用于一次性或间隔执行,CronTrigger...
Quartz 是一个强大的开源作业调度框架,专为 Java 平台设计,无论是 J2SE 还是 J2EE 应用程序,都能轻松集成。它的核心功能在于允许开发者定义任务和调度策略,使得应用程序能够在预定的时间执行特定的任务,极大地...
在这个配置类中,我们创建了 JobDetail 和 CronTrigger 的 Bean,并将其注入到 SchedulerFactoryBean 中,这样 Spring Boot 就会在启动时自动初始化并运行 Quartz 调度器。 在 "example 和 demo" 部分,通常会包含...
Quartz是一个开源的作业调度框架,它允许开发者在Java应用程序中安排任务的执行。这个"quartz-2.2.3-distribution.zip"文件包含了Quartz库的2.2.3版本的所有组件和文档,方便用户进行开发和部署。下面我们将深入探讨...
集成Quartz到Spring项目中,首先需要在Spring的配置文件中定义一个`SchedulerFactoryBean`,这将负责创建和管理Quartz的`Scheduler`实例。然后,我们可以创建一个实现`Job`接口的类来定义任务逻辑,并使用`...
在Spring中使用Quartz,首先需要配置SchedulerFactoryBean,然后定义JobDetail和Trigger,将它们绑定在一起并添加到Scheduler中。Spring的依赖注入特性允许将业务逻辑封装在bean中,然后由Quartz按需调用。此外,还...
Spring 提供了一个 `SchedulerFactoryBean`,它负责初始化和管理 Quartz 的 Scheduler 实例,并自动将我们的 Job 和 Trigger 配置进去。 ```java @Bean(destroyMethod = "shutdown") public Scheduler scheduler...
【Spring中的Quartz配置-Spring-定时器-java定时器】 在Java开发中,Spring框架提供了对定时任务的支持,其中就包括了对Quartz库的集成。Quartz是一款强大的任务调度库,可以用来创建、调度和执行定时任务。下面将...
7. **API使用**:Quartz提供了丰富的API,例如`Scheduler`接口、`JobDetail`类、`Trigger`接口等,开发者可以通过这些API来编程式地操作调度器。 8. **配置(Configuration)**:Quartz的配置主要通过`quartz....
内容提要:配置、创建并运行 Quartz RMI 端户端,演示了 Quartz RMI 客户端通过远程调度器部署一个 Job 的 的例子。 第十章. J2EE 中使用 Quartz (第一部分) 内容提要:J2EE 中引入 Quartz。在 J2EE 环境中作为 ...
Quartz.NET的核心概念包括Job、Trigger、Scheduler和JobDetail。 2. **.NET Core支持** 这个案例使用的是.NET Core,这是一个跨平台的开发框架,使得Quartz.NET可以在Windows、Linux、macOS等操作系统上运行。.NET...
Spring 3.0 和 Quartz ...首先,你需要在Spring配置文件中声明一个`SchedulerFactoryBean`,这将初始化并管理Quartz调度器。然后,通过定义`JobDetail`和`Trigger`,你可以将Spring的bean作为任务来调度。 ```xml ...
2. 配置Spring的ApplicationContext,声明Quartz相关的bean,如SchedulerFactoryBean、JobDetail和Trigger。 3. 定义Job类,实现`org.quartz.Job`接口,定义任务的具体逻辑。 4. 创建Trigger,指定Job的执行策略,...
Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义定时任务。这个示例提供了在Spring框架中集成Quartz的详细步骤,适合Java工程的实现。下面将详细介绍Spring与Quartz结合使用的相关知识点...
Quartz是Java领域一个广泛应用的开源任务调度框架,它的核心功能是允许开发者安排任务在特定时间执行,或者按一定间隔重复执行。这个压缩包“quartz-2.2.3”包含了Quartz库的jar文件以及源代码,这对于开发者理解和...
Quartz是一个开源的作业调度框架,它允许程序在预定的时间执行特定的任务,广泛应用于Java企业级应用中。在"quartz-1.6.0任务调试"中,我们需要理解Quartz的基本概念、配置以及如何进行任务的调试。 首先,Quartz的...
在Quartz中,作业和触发器通过“作业细节”(JobDetail)和“触发器细节”(TriggerDetail)进行配置,并存入“作业存储”(JobStore)。作业存储可以是内存中的,也可以持久化到数据库,确保服务器重启后任务调度不...