Quartz定时器的介绍

发表时间:2017-07-11 17:06:58 浏览量( 61 ) 留言数( 0 )

学习目标:

1、了解Quartz的环境搭建

2、了解Quartz的基本概念


学习过程:

要想实现定时任务,有很多解决方法,我们可以使用Thread死循环,使用sleep休眠一段时间,也可以使用java.util.TimerTask工具类,这个工具类以后我们会在学习线程的时候在学习。但是这些工具虽然使用简单,功能也不强大,面对要求高的业务需求时可能就无能为力了。比如一旦重启,定时任务就有可能会消失。对大量的定时任务时效率比较低。所以我们需要更加专业的定时任务工具,就是Quartz。Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。

quartz的官方网站:http://www.quartz-scheduler.org/

网站上面有一个入门的示例,大家有时间可以看一下:http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/

往后的几节课我们都会借鉴这个教程,大家可以自己先操作一下的。

一、导入相关的包

<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.1</version>
		</dependency>


二、第一个示例:

   这个例子将会每40秒就会执行一次任务,看一下源代码:

1、定义一个Job

public class HelloJob implements Job{

	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("hello"+new Date());
		
	}

}

2、运行类

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.DateBuilder.*;

public class QuartzTest {

	public static void main(String[] args) {

		try {
			SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

			Scheduler sched = schedFact.getScheduler();

			sched.start();

			// define the job and tie it to our HelloJob class
			JobDetail job = newJob(HelloJob.class).withIdentity("myJob", "group1").build();

			// Trigger the job to run now, and then every 40 seconds
			Trigger trigger = newTrigger().withIdentity("myTrigger", "group1").startNow()
					.withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();

			// Tell quartz to schedule the job using our trigger
			sched.scheduleJob(job, trigger);
		} catch (SchedulerException se) {
			se.printStackTrace();
		}
	}
}


从上面的类我们可以看到主要有几个主要的类:

1、SchedulerFactory

   SchdulerFactory,Schduler工厂类是来用创建Schduler了,有两个实现:DirectSchedulerFactory和 StdSchdulerFactory。DirectSchedulerFactory可以用来在代码里定制你自己的Schduler参数。StdSchdulerFactory直接读取classpath下的quartz.properties(不存在就都使用默认值)配置来实例化Schduler。通常来讲,我们使用StdSchdulerFactory也就足够了。


2、Scheduler 

   Scheduler就是任务执行的调度器,所有任务都是由它来调度。scheduler被实例化,它就可以被启动(start),并且处于驻留模式,直到被关闭(shutdown)。  注意,一旦scheduler被关闭(shutdown),则它不能再重新启动,除非重新实例化它


3、JobDetail & Job

  JobDetail是任务的定义,而Job是任务对象。在JobDetail里会引用一个Job Class定义。一个最简单的例子

  JobDetail 可将参数封装成JobDataMap对象,Quartz将任务的作业状态保存在JobDetail中.

  JobDataMap JobDataMap用来报错由JobDetail传递过来的任务实例对象

4、Trigger实现类

 触发器,定义任务执行的时机,有几个常用的实现类,可以让你方便的定义执行的时机

SimpleTrigger <普通的Trigger> --  SimpleScheduleBuilder

CronTrigger  <带Cron Like 表达式的Trigger> -- CronScheduleBuilder

CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder

DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder