quartz定时器
文章目录
一、quartz是什么?
quartz就是基于java实现的任务调度框架,用于执行你想要执行的任何任务。
二、Quartz设计模式
- Builder模式
- Factory模式
- 组件模式
- 链式编程
三、Quartz学习的核心概念
- 任务Job
Job就是你想要实现的任务类,每一个Job必须实现org.quartz.job接口,且只需实现接口定义的execute()方法。
- 触发器Trigger
Trigger为你执行任务的触发器,比如你想每天定时3点发送一份统计邮件,Trigger将会设置3点进行执行该任务。Trigger主要包含两种SimpleTrigger和CronTrigger两种。关于二者的区别的使用场景,后续的课程会进行讨论。
- 调度器Scheduler
Scheduler为任务的调度器,它会将任务job及触发器Trigger整合起来,负责基于Trigger设定的时间来执行Job。
四、Quartz的几个常用API
以下是Quartz编程API几个重要接口,也是Quartz的重要组件
- Scheduler 用于与调度程序交互的主程序接口。
Scheduler 调度程序-任务执行计划表,只有安排进执行计划的任务Job(通过scheduler.scheduleJob方法安排进执行计划),当它预先定义的执行时间到了的时候(任务触发trigger),该任务才会执行。 - Job 我们预先定义的希望在未来时间能被调度程序执行的任务类,我们可以自定义。
- JobDetail 使用JobDetail来定义定时任务的实例,JobDetail实例是通过JobBuilder类创建的。
- JobDataMap 可以包含不限量的(序列化的)数据对象,在job实例执行的时候,可以使用
其中的数据;JobDataMap是Java Map接口的一个实现,额外增加了一些便于存取基本类型的数
据的方法。 - Trigger 触发器,Trigger对象是用来触发执行Job的。当调度一个job时,我们实例一个触发器然后调整它的属性来满足job执行的条件。表明任务在什么时候会执行。定义了一个已经被安排的任务将会在什么时候执行的时间条件,比如每2秒就执行一次。
- JobBuilder -用于声明一个任务实例,也可以定义关于该任务的详情比如任务名、组名等,这个声明的实例将会作为一个实际执行的任务。
- TriggerBuilder 触发器创建器,用于创建触发器trigger实例。
- JobListener、TriggerListener、SchedulerListener监听器,用于对组件的监听。
五、入门案例
1.创建maven工程导入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
2.导入log4j.properties配置文件来打印log信息
3.创建Job的实现类(任务类)
public class HelloJob implements Job {
/**
*
* @param jobExecutionContext 上下文
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//输出当前时间
Date date = new Date();
//模拟工作的内容
System.out.println("正在进行数据库的备份工作,备份数据库的时间是" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
}
}
4.创建任务调度类
public class HelloSchedulerDemo {
public static void main(String[] args) throws SchedulerException {