Quartz的简单入门
Quartz简单理解
Quartz是一个任务调度框架。比如你遇到这样的问题
- 想每天早上8点给自己定一个闹钟
- 想每年2月14日自己给自己的女神发一封贺卡
- 想每隔2个小时,下载一部爱情动作片 到云盘
这些问题总结起来就是:在某一个指定的的时间段内干某件事。并且时间的触发的条件可以非常复杂(比如每月最后一个工作日的17:50),复杂到需要一个专门的框架来干这个事。 Quartz就是来干这样的事,你给它一个触发条件的定义,它负责到了时间点,触发相应的Job起来干活。
一个简单的示例
package cn.quartz.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* 一个数据库备份的工作
*
* @author JP
* @create 2019/1/17 0017
* @since 1.0.0
*/
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//输出时间
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=format.format(date);
System.out.println("正在进行数据库备份工作,备份时间是:"+time);
}
}
几个概念搞清楚先:
- 触发器 Trigger: 什么时候工作
- 任务 Job: 做什么工作
- 调度器 Scheduler: 搭配 Trigger和Job
package cn.quartz.main;
import cn.quartz.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
*
*
* @author JP
* @create 2019/1/17 0017
* @since 1.0.0
*/
public class HelloSchedulerDemo {
public static void main(String[] args) throws Exception {
//1.调度器(Scheduler) ,从工厂中获取调度实例(默认:实例化 new StdSchedulerFactory();)
Scheduler scheduler=StdSchedulerFactory.getDefaultScheduler();
//2.任务实例
JobDetail jobDetail= JobBuilder.newJob(HelloJob.class)
//加载任务类,与hellojob完成绑定
.withIdentity("job1","group")
//参数1:任务的名称(唯一实例);参数2:任务组的名称
.build();
//3.触发器(Tigeer)
Trigger trigger= TriggerBuilder.newTrigger()
.withIdentity("trigger","group1")
//参数1:触发器名称 参数2:组名称
.startNow() //马上启动
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5) //每过5秒执行一次
.withRepeatCount(5)) //共执行6次 换成repeatForever() 的话,一直执行
.build();
//调度器关联任务和触发器,保证按照触发器定义条件执行任务
scheduler.scheduleJob(jobDetail,trigger);
//启动
scheduler.start();
//等待30秒,让前面的任务都执行完了之后,再关闭调度器
Thread.sleep(30000);
scheduler.shutdown(true);
}
}
执行效果