Quartz是一个完全由java编写的开源作业调度框架,具体了解见百度
我们现跑一个简单的Quartz
- 创建项目导入依赖
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency>
2. 了解Quartz 逻辑,其实代码都是按照我们逻辑思维写的,一个定时任务我们一般需要那几个元素,a.一个调度器 b.一个触发器 c.任务。所以我们在写代码的时候先创建这三个元素
public class MyJobTest {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//创建调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 創建觸發器
Trigger trigger = TriggerBuilder.newTrigger().build();
// 创建任务
JobDetail jobDetail = JobBuilder.newJob().build();
}
}
这样定时任务基本框架已经有了,下来我们要做的完善每一个元素。
调度器的作用就是将 触发器和任务绑定,开启,关闭定时器。
触发器:包含,触发器的名称,开始时间,结束时间,还有就是间隔时间,执行次数。
任务:包含 任务名称,任务详情。
我们下来完善代码
package com.example.demo;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.GregorianCalendar;
/**
* Author : 尤毅鹤
* Date: 2020/04/01 12:47
* Description: <描述>
*/
public class MyJobTest {
public static void main(String[] args) throws SchedulerException, InterruptedException {
//创建调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 創建觸發器
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("triggerTest","triggerTest")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()) // 每隔5秒永久执行,这里也可以改为特定的执行次数
.endAt(new GregorianCalendar(2020,3,1,13,13,10).getTime())
.build();
// 创建任务详情
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity("jobTest","jobTest")
.usingJobData("test","myjobTest") // 传递参数到具体的任务中,可有可无
.build();
// 将觸發器和任务注册到调度器上
scheduler.scheduleJob(jobDetail,trigger);
scheduler.start();
Thread.sleep(100000);
scheduler.shutdown();
}
}
下面是我们具体要干的事情
package com.example.demo;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
/**
* Author : 尤毅鹤
* Date: 2020/04/01 12:47
* Description: <描述>
*/
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDetail jobDetail = jobExecutionContext.getJobDetail();
String name = jobDetail.getKey().getName();
String group = jobDetail.getKey().getGroup();
String test = jobDetail.getJobDataMap().getString("test");
System.err.println("JobDetail jobName :" + name + " Group: " + group +" test "+test+new Date());
}
}
执行结果: