quartz核心:任务,触发器,调度器
创建好maven项目,pom文件加入quartz依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.6</version>
</dependency>
第一步:编写任务
1.实现job接口
package cn.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class RemindJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("执行任务");
}
}
2.创建任务
name是任务明,group是分组,最后一个是反射,执行RemindJob的构造方法和执行方法
package cn.quartz;
import org.quartz.JobDetail;
import java.util.Date;
public class TestMain {
public static void main(String[] args){
//1.创建job任务,传入任务名,组,和反射类
JobDetail job = new JobDetail("myjob","A",RemindJob.class);
}
}
第二步:创建触发器:SimpleTrigger
因为使用场景问题:SimpleTrigger可能会比较少用,下面会有用到CronTrigger触发器
package cn.quartz;
import org.quartz.JobDetail;
import org.quartz.SimpleTrigger;
import java.util.Date;
public class TestMain {
public static void main(String[] args){
//1.创建job任务,传入任务名,组,和反射类
JobDetail job = new JobDetail("myjob","A",RemindJob.class);
//2.创建触发器,三个入参分别是:触发器名称,SimpleTrigger.REPEAT_INDEFINITELY(运行方式),运行时间
SimpleTrigger trigger = new SimpleTrigger("myTrigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
//指定第一次执行任务时间,当前时间的下一秒
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
}
}
第三步:实现调度器
调度器作用:任务的执行者,负责粘合任务和触发器
1.创建调度器
2.注册任务和触发器
3.启动和关闭调度,
全部代码
public static void main(String[] args) throws SchedulerException {
//1.创建job任务,传入任务名,组,和反射类
JobDetail job = new JobDetail("myjob","A",RemindJob.class);
//2.创建触发器,三个入参分别是:触发器名称,SimpleTrigger.REPEAT_INDEFINITELY(运行方式),运行时间
SimpleTrigger trigger = new SimpleTrigger("myTrigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
//指定第一次执行任务时间,当前时间的下一秒
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
//3.创建调度器
//创建Scheduler工厂SchedulerFactory的实例
SchedulerFactory factory = new StdSchedulerFactory();
//获取调度器
Scheduler scheduler = factory.getScheduler();
//粘合任务和触发器
scheduler.scheduleJob(job,trigger);
//执行任务
scheduler.start();
Thread.sleep(20*1000);
//关闭调度器
scheduler.shutdown();
}
效果:每3秒执行一次RemindJob里的execute方法,只要不调用scheduler.shutdown()方法就会一直执行
我这里主线程休眠了20秒才调用scheduler.shutdown()方法,一共执行了7次(在控制台输出7次"执行任务")
使用CronTrigger触发器实现任务调度
SimpleTrigger触发器是每隔多久执行一次
CronTrigger触发器是指定什么时候执行一次
用CronTrigger触发器代替SimpleTrigger触发器,改两行代码
主要代码:测试时注意修改Cron表达式
//1.在每天的19点22分执行任务
CronTrigger cronTrigger = new CronTrigger("myCronTrigger","B","0 22 19 ? * * ");
//2.粘合任务和触发器
scheduler.scheduleJob(job,cronTrigger);
红色方框里的是Cron表达式,详细说明:https://blog.csdn.net/qq_41622603/article/details/103809878
全部代码:
package cn.quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
public class TestMain {
public static void main(String[] args) throws Exception {
//1.创建job任务,传入任务名,组,和反射类
JobDetail job = new JobDetail("myjob","A",RemindJob.class);
//2.创建触发器,三个入参分别是:触发器名称,SimpleTrigger.REPEAT_INDEFINITELY(运行方式),运行时间
//SimpleTrigger trigger = new SimpleTrigger("myTrigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
//在每天的19点22分执行任务
CronTrigger cronTrigger = new CronTrigger("myCronTrigger","B","0 22 19 ? * * ");
//指定第一次执行任务时间,当前时间的下一秒
//trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
//3.创建调度器
//创建Scheduler工厂SchedulerFactory的实例
SchedulerFactory factory = new StdSchedulerFactory();
//获取调度器
Scheduler scheduler = factory.getScheduler();
//粘合任务和触发器
//scheduler.scheduleJob(job,trigger);
scheduler.scheduleJob(job,cronTrigger);
//执行任务
scheduler.start();
Thread.sleep(200*1000);
//关闭调度器
scheduler.shutdown();
}
}