quartz实例演示
pom.xml添加
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.1</version>
</dependency>
实例一: 简单的重复调度
/**
* Job 任务类
* @author hxp
* @create 2020-11-12 16:36
*/
// 每次调度完成之后会对job持久化,保存数据信息。 由无状态的调度变成有状态的调度
@PersistJobDataAfterExecution
public class HelloJob implements Job {
private Integer count;
public void setCount(Integer count) {
this.count = count;
}
public HelloJob() {
System.out.println("每个调度周期都是一个新的实例...");
}
/**
* 具体调度任务需要执行的业务逻辑
* @param jobExecutionContext
* @throws JobExecutionException
*/
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
/*获取jobDetail中的数据*/
System.out.println("从JobExecutionContext中获取:"+jobExecutionContext.getJobDetail().getKey().getName());
System.out.println("从JobExecutionContext中获取:"+jobExecutionContext.getJobDetail().getJobClass().getName());
/*从jobDetail中获取jobDataMap中的数据*/
System.out.println("从jobDetail中获取jobDataMap中的数据:"+jobExecutionContext.getJobDetail().getJobDataMap().getString("msg"));
/*从jobTrigger中获取jobDataMap中的数据*/
System.out.println("从jobTrigger中获取jobDataMap中的数据:"+jobExecutionContext.getTrigger().getJobDataMap().getString("msg"));
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(date).intern();
System.out.println("正在备份数据库 "+format);
System.out.println("count="+ ++count);
jobExecutionContext.getJobDetail().getJobDataMap().put("count",count);
}
}
/**
* @author hxp
* @create 2020-11-12 16:40
*/
public class QuartzMain {
public static void main(String[] args) throws SchedulerException {
// 调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)// 加载绑定任务类
.withIdentity("job1", "group1") // 任务名称 任务组名称
.usingJobData("msg","jobDetail打印日志")
.usingJobData("count",0)
.build();
System.out.println("任务名称:"+jobDetail.getKey().getName());
System.out.println("任务组名称:"+jobDetail.getKey().getGroup());
System.out.println("任务类名称:"+jobDetail.getJobClass());
// 触发器
Trigger simpleTrigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1") // 触发器的名称 触发器组的名称
.startNow() // 马上启动触发器
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(1))
.usingJobData("msg","simpleTrigger打印日志")
.build();
scheduler.scheduleJob(jobDetail,simpleTrigger);
scheduler.start();
}
}
实例二:根据core表达式进行调度
package com.quartz.demo.trigger;
import com.quartz.demo.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
/**
* @author hxp
* @create 2020-11-12 16:40
*/
public class QuartzMainTrigger {
public static void main(String[] args) throws SchedulerException {
// 开始时间
Date starttime = new Date();
starttime.setTime(starttime.getTime()+3000);
//结束时间
Date endtime = new Date();
endtime.setTime(endtime.getTime()+15000);
// 调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 任务实例
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)// 加载绑定任务类
.withIdentity("job1", "group1") // 任务名称 任务组名称
.usingJobData("count",0)
.usingJobData("msg","msg===")
.build();
// 触发器
Trigger simpleTrigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1") // 触发器的名称 触发器组的名称
//.startNow() // 马上启动触发器
//.startAt(starttime) // 特定的时间启动
//.endAt(endtime) // 指定结束时间
// todo simpleTrigger 使用场景为:需要在特定的时间启动,且以一个可能的时间间隔重复执行n次的job所设计
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(1))
// 指定执行间隔和重复次数 this number + 1.
//.withSchedule(CronScheduleBuilder.cronSchedule("* 48 * * * ?").withMisfireHandlingInstructionDoNothing())
//.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?").withMisfireHandlingInstructionIgnoreMisfires())
//.withSchedule(CronScheduleBuilder.cronSchedule("* 48 * * * ?").withMisfireHandlingInstructionFireAndProceed())
//.withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
// .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3).withRepeatCount(2))// 间隔3秒实际重复执行次数 2+1
.build();
scheduler.scheduleJob(jobDetail,simpleTrigger);
scheduler.start();
// scheduler.shutdown(false);
}
}