Quartz 是一个比较强大的任务调度工具,而且其与Spring结合尤为简单,最近因为项目的需要,简单的用到了 Quartz 的一些功能,下面对项目中使用 Quartz 的一些问题做简单的记录。
Quartz作业调度通常用两种方式实现,不与Spring集成和与Spring集成。本文先介绍下单独使用Quartz进行作业调度。作业调度主要包括三个部分,作业(job)、触发器(trigger)、调度器(scheduler)。下面我们看看如何创建一个作业调度项目。创建一个工程。把quartz-1.5.2.jar导入工程,然后创建一个作业类,让他继承Job接口,重写execute方法。代码如下所示:
package com.aostarit.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class JobTest implements Job
{
public void execute(JobExecutionContext arg0) throws JobExecutionException
{
System.out.println("this is a quartz test!");
}
}
然后创建调度类(也可以把作业类和调度类写在一个类里)。代码如下所示:
package com.aostarit.quartz;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest
{
public void run() throws SchedulerException
{
// First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
// define the job and tie it to our JobTest class
JobDetail job = new JobDetail("job1", "group1", JobTest.class);
// Trigger the job to run on the next round minute
SimpleTrigger trigger =
new SimpleTrigger("trigger1", "group1", new Date(), null, 10, 1500L);
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
// Start up the scheduler
sched.start();
}
public static void main(String[] args) throws SchedulerException
{
QuartzTest test = new QuartzTest();
test.run();
}
}
在该类中,我们用到了以下的一些东西,ScheduleFactory, Scheduler, Job, JobDetail, Trigger,简单说明一下他们的用途。
Scheduler 是一个调度器,其中可以包含多个 JobDetail 和 Trigger 组成的计划任务。我们需要从调度工厂中获取一个调度器实例。
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail描述了一个任务具体的信息,比如名称,组名等等。
JobDetail job = new JobDetail("job1", "group1", JobTest.class);
在上面的构造方法中,第一个是任务的名称,第二个是组名,第三个就是实际当任务需要执行的回调类。
Trigger顾名思义就是触发器,Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类,当Trigger认为执行条件满足的时刻,Trigger会通知相关的Job去执行。分离的好处是:
1.你可以为某个Job关联多个Trigger,其中任何一个条件满足都可以触发job执行,这样可以完成一些组合的高级触发条件
2.当Trigger失效后(比如:一个永远都不能满足的条件),你不必去声明一个新的job,代替的是你可以为job关联一个新的Trigger让job可以继续执行。
目前的Quartz实现中,存在两种Trigger,SimpleTrigger和CronTrigger,SimpleTrigger用来完成一些比如固定时间执行的任务,比如:从现在开始1分钟后等等;而CronTrigger(没错,和unix的cron进程的含意一样)用来执行calendar-like的任务,比如:每周五下午3:00,每月最后一天等等。
在我们项目中,都是一些固定时间的 Job,所以只用到了 SimpleTrigger。
SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1",new Date(),null, 10, 1500L);
这个构造方法中,第一个是Trigger的名称,第二个是Trigger的组名,第三个是任务开始时间,第四个是结束时间,第五个是重复次数,最后一个是重复周期(单位是毫秒)。
然后我们需要把JobDetail和Trigger关联起来,当Trigger认为条件满足时,他就会自动执行JobTest类里的execute方法。
sched.scheduleJob(job, trigger);
最后,我们启动触发器,开始执行作业调度任务。
sched.start();
关于execute方法的参数JobExecutionContext
JobExecutionContext 就和很多Context结尾的类功能一样,提供的运行时刻的上下文环境,JobExecutionContext中有 Scheduler,JobDetail,Trigger等很多对象的引用,从而当你在execute方法内部须需要这些对象的时刻提供的便利。
在项目中,我们把需要执行的 Job 相对应的一些信息放在 JobExecutionContext 中,在 Job 执行的时候可以调用。在调度器(即上文的run方法)中加入如下代码:
jobDetail.getJobDataMap().put(userid, id);
在 Job(上文的JobTest类)中,我们可以拿到相关的 Context 信息:
jobExecutionContext.getJobDetail().getJobDataMap().getInt(userid);
注意:若是想在web工程中执行作业调度,即在启动应用服务器(weblogic、tomcat等),需要在 web.xml 里面加入以下配置:
<listener>
<listener-class>org.agilejava.scheduler.ScheduleStartListener</listener-class>
</listener>
ps:建议想学Quartz作业调度的人,可以下载quartz-1.5.2.zip包,包里除了包括Quartz的源码,还包括13个quartz的使用范例,难度也是从低到高,非常值得一看,不过加载项目的时候记得把quartz-1.5.2.jar和commons-logging-1.0.1.jar包导入工程之中。
分享到:
相关推荐
这个学习笔记将深入探讨Quartz的核心概念、主要功能以及如何在实际项目中使用它。 首先,我们要理解Quartz的基本架构。Quartz的核心组件包括Scheduler、Job、Trigger和Calendar。Scheduler是调度器,负责管理所有的...
Quartz 支持与 J2EE 和 J2SE 平台的无缝集成,允许开发者在各种类型的项目中实现定时任务。 在 Quartz 中,"Job" 是执行的实体,它代表了一个具体的任务。你可以将 Jobs 实现为标准的 Java 组件(JavaBeans)或者更...
这篇笔记将深入探讨如何使用Spring与Quartz结合来实现触发器的示例。 首先,Quartz是一个开源的作业调度框架,它允许开发者定义任务并在预定的时间点执行。Spring则是一个强大的应用框架,提供了依赖注入(DI)和...
Quartz是一款开源的作业调度框架,它允许开发者创建和管理定时任务,以便在特定时间执行。在Java世界中,Quartz被广泛应用于...通过实践和学习,你将能够熟练掌握Quartz的使用,为你的项目带来更高效的自动化处理能力。
本学习笔记主要围绕Quartz的使用,特别是如何利用corn表达式来设置定时任务。 Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是你要执行的实际业务逻辑,Trigger定义了Job何时被...
通过阅读这些资料,你可以掌握如何在项目中有效地使用Quartz,提升系统的自动化程度和效率。 在实际使用中,开发者应结合源代码、文档和社区资源,不断实践和探索,以充分发掘Quartz的潜力,解决各种复杂的定时任务...
此外,笔记中可能涉及 Spring Boot 配置文件的应用,如 `application.properties` 或 `application.yml`,它们用于设置应用的属性。你还会了解到如何通过 `@Value` 注解注入配置属性到类的字段,以及如何自定义配置...
《若依RuoYi框架剖析笔记》是基于江南一点雨的课程并结合个人理解整理而成,涵盖了项目改造、框架结构分析以及多个关键功能模块的深入探讨。以下将逐一解析这些知识点。 1、**项目改造**:首先,从源代码仓库获取...
Quartz是OpenSymphony开放式组织在工作调度领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合,也可以单独使用。 Quartz是开源且具有丰富特性的“任务调度库”,能够集成于任何的Java应用,小到独立的应用,大...
在项目根目录下的`README.md`文件中,可能包含了更详细的笔记和示例代码,可以进一步学习和理解。 总的来说,SpringBoot与Quartz的整合为Java开发者提供了一种高效、灵活的方式来管理定时任务,提高了应用的自动化...
除此之外,笔记可能还会涵盖SpringBoot的安全管理,如使用Spring Security进行权限控制,以及如何集成发送邮件、定时任务Quartz、WebSocket等常见功能。对于性能优化,如缓存技术Redis的集成、Spring Boot的Profile...
Spring Boot 是一个由 Pivotal 团队创建的 Java 框架,旨在简化 Spring 应用程序的...如果你希望深入学习 Spring Boot 的开发,这个 demo 笔记会是一个很好的起点,从中你可以了解到如何将理论知识应用到实际项目中。
它集成了大量的常用第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者可以快速地创建出生产级别的 Java 应用。尚硅谷的 Spring Boot 笔记提供了全面的学习资源,帮助学习者深入理解并掌握这个...
Spring Boot 是一个基于 Spring 框架的快速开发...这个完整的 Spring Boot 学习笔记涵盖了从基础到进阶的各个方面,通过学习和实践,你可以掌握 Spring Boot 开发的核心技能,从而高效地构建高质量的 Java 后端应用。
标题中的“spring2.0学习笔记+spring定时任务”表明了这个压缩包文件包含的是关于Spring框架2.0版本的学习资料,特别是关于Spring的定时任务功能。Spring是Java开发中最广泛应用的轻量级框架之一,它提供了一整套...
这个项目对于学习Java Web开发,尤其是Springboot、SSM和JSP的融合运用,以及如何构建一个完整的线上应用,具有很高的实践价值。同时,它也是一个很好的毕业设计选题,能够全面检验学生的综合开发能力和团队协作能力...
SpringBoot学习笔记完整教程 SpringBoot是Spring框架的一个简化版,旨在简化Spring应用程序的初始设置和开发过程。它集成了大量的常用库,如数据访问、安全、Web等,使得开发者可以快速构建健壮的微服务应用。本...
这个“spring学习笔记”包含了与Spring框架相关的源代码和项目实践,旨在帮助学习者深入理解并掌握Spring的核心概念和技术。 首先,Spring的核心特性之一是依赖注入(Dependency Injection, DI),它允许开发者通过...
**J2EE框架详解** ...这些项目为学习者提供了实战经验,有助于深入理解J2EE框架的各个组成部分及其实际应用场景。通过研究这些项目,开发者可以提升自己的技能,更好地应对企业级应用开发的挑战。