1.添加maven
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.6</version>
</dependency>
2.创建实现类
package cn.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
//引入接口创建实现方法
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("执行的工作");
}
}
CronTrigger 是Trigger的子类
SimpleTrigger 固定时间间隔的调度任务(如每2小时执行1次)
CronTrigger 指定时间点的调度任务(如每天1点执行1次)
Cron表达式由6-7个空格+分隔符组成的时间元素(第7个可选)
一定要保持6个元素
测试类
package cn.quartz;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.text.ParseException;
import java.util.Date;
public class Test {
public static void main(String[] args) throws SchedulerException, InterruptedException, ParseException {
//创建任务实例 名称 组别A 反射实现class
JobDetail jobDetail=new JobDetail( "job1","A",MyJob.class);
//创建触发器 trigger 名称 运行方式 运行时间
SimpleTrigger simTrig = new SimpleTrigger("mytigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);
// 名称 分组 表达式 秒 分 点
CronTrigger cronTrigger=new CronTrigger("Ctigger","B","0 22 13 ? * *");
//设置开始时间 系统当前时间+1秒=运行后1秒执行
simTrig.setStartTime(new Date(System.currentTimeMillis()+1000));
//创建SchedulerFactory调度器工厂实例
SchedulerFactory factory=new StdSchedulerFactory();
//获取调度器
Scheduler scheduler=factory.getScheduler();
//粘合任务和调度器
scheduler.scheduleJob(jobDetail,cronTrigger);
//
scheduler.start();
//线程休眠5秒后再往下执行
Thread.sleep(50000);
//停止任务
scheduler.shutdown();
}
}
Spring中的使用
applicationContext 中添加task DTD
@Scheduled(cron= “0 22 13 ? * *”);
public void test(){}
使用Job创建定时任务
public class QzDemo {
public static void main(String[] args) throws Exception{
//创建工作
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withDescription("工作的描述")
.withIdentity("工作的名称", "工作的组")
.build();
//表达式调度构建器
CronScheduleBuilder cronScheduleBuilder= CronScheduleBuilder.cronSchedule("0/5 * * ? * *");
//创建触发器
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription("触发器的描述")
.withIdentity("触发器的名称", "触发器的组")
.withSchedule(cronScheduleBuilder) //"0/5 11 * ? * *"表达式
.startAt(new Date())//不设置,默认为当前时间
.build();
System.out.println(trigger.getJobKey());//当trigger触发时被执行的job的身份;
//创建调度器,粘合工作和触发器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
//启动调度器
scheduler.start();
}