1. 实现一个简单的定时任务
1. 创建配置文件
创建自己的quartz.properties文件 放到应用的classpath下
# 调度器的名称为 MySchedulerorg.quartz.scheduler.instanceName = MyScheduler# 线程池中有3个线程,这意味着最多可以同时运行3个joborg.quartz.threadPool.threadCount = 3# RamJobStore: 所有数据,包括job和trigger的配置,都会存储在内存中(而不是数据库里)# 使用quartz的数据库存储功能(校对注:设置成另外一个类)org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
2. 创建一个简单job
public class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("Hello World");}}
3. 获取调度器并注册job
/*** 关于 Quartz 的一个快速应用*/public class QuickStart {public static void main(String[] args) {try {//获取调度器Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();//启动scheduler.start();//创建一个简单任务JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();//创建触发器Trigger trigger= TriggerBuilder.newTrigger().withIdentity("trigger1","trigger1").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();//注册该任务到调度器中scheduler.scheduleJob(jobDetail, trigger);Thread.sleep(30000);//关闭scheduler.shutdown();} catch (SchedulerException | InterruptedException e) {e.printStackTrace();}}}
2. 触发任务时,携带数据
2.1 插入数据
job 和 Trigger 都能携带数据
可以在bulid的时候插入数据 也可以根据实例获取到 JobDataMap 插入数据
//创建一个简单任务JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").usingJobData("j1","jv1").build();jobDetail.getJobDataMap().put("j2","jv2");//创建触发器Trigger trigger= TriggerBuilder.newTrigger().withIdentity("trigger1","trigger1").usingJobData("t1","tv1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();trigger.getJobDataMap().put("t2","tv2");
2.2 获取数据
在 job 中重写的 execute 方法中的 context 中获取
@Slf4jpublic class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {log.info("j1:{}", context.getJobDetail().getJobDataMap().get("j1") );log.info("j2:{}", context.getJobDetail().getJobDataMap().get("j2") );log.info("t1:{}", context.getTrigger().getJobDataMap().get("t1") );log.info("t2:{}", context.getTrigger().getJobDataMap().get("t2") );System.out.println("Hello World");}}
