public interface Job {void execute(JobExecutionContext context)throws JobExecutionException;}
在 Builder 建造过程中,可以使用如下方法:usingJobData("tiggerDataMap", "测试传参")
在 execute 方法中获取:context.getTrigger().getJobDataMap().get("tiggerDataMap");context.getJobDetail().getJobDataMap().get("tiggerDataMap");
Job 状态参数有状态的 job 可以理解为多次 job调用期间可以持有一些状态信息,这些状态信息存储在 JobDataMap 中 。而默认的无状态 job,每次调用时都会创建一个新的 JobDataMap 。
示例如下:
//多次调用 Job 的时候,将参数保留在 JobDataMap@PersistJobDataAfterExecutionpublic class JobStatus implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {long count = (long) context.getJobDetail().getJobDataMap().get("count");System.out.println("当前执行,第" + count + "次");context.getJobDetail().getJobDataMap().put("count", ++count);}}
JobDetail job = JobBuilder.newJob(JobStatus.class).withIdentity("statusJob", "group1").usingJobData("count", 1L).build();
输出结果:当前执行,第1次[main] INFO org.quartz.core.QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.当前执行,第2次当前执行,第3次
Trigger定时启动/关闭Trigger 可以设置任务的开始结束时间, Scheduler 会根据参数进行触发 。Calendar instance = Calendar.getInstance();Date startTime = instance.getTime();instance.add(Calendar.MINUTE, 1);Date endTime = instance.getTime();// 3.构建Trigger实例Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")// 开始时间.startAt(startTime)// 结束时间.endAt(endTime).build();
在 job 中也能拿到对应的时间,并进行业务判断public void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("任务执行 。。。");System.out.println(context.getTrigger().getStartTime());System.out.println(context.getTrigger().getEndTime());}
运行结果:[main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.3.01633149326723任务执行 。。。Sat Oct 02 12:35:26 CST 2021Sat Oct 02 12:36:26 CST 2021[main] INFO org.quartz.core.QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
SimpleTrigger这是比较简单的一类触发器,用它能实现很多基础的应用 。使用它的主要场景包括:- 在指定时间段内,执行一次任务
- 在指定时间段内,循环执行任务
TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(30).repeatForever())
withRepeatCount(count) 是重复次数,实际运行次数为 count+1TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(30).withRepeatCount(5))
- 立即开始,指定时间结束
CronTriggerCronTrigger 是基于日历的任务调度器,在实际应用中更加常用 。
虽然很常用,但是知识点都一样,只是可以通过表达式来设置时间而已 。
使用方式就是绑定调度器时换一下:
TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
Cron 表达式这里不介绍,贴个图跳过文章插图
SpringBoot 整合下面集成应用截图来自 Ruoyi 框架:
文章插图
推荐阅读
- 超跑|3.5秒破百的V12怪兽!阿斯顿马丁新超跑限量249辆已卖空
- 穿衣搭配|海清母子同框,“蛋妞”身材纤细很绅士,她留超短发很俏皮
- 华为|269元 李小龙力荐华为S-Tag运动传感器:详细记录跑步数据
- iPhone长篇笔记文章,怎么截成超长图片分享给别人?
- 超磁分离水体净化技术 超磁分离技术
- 穿衣搭配|50+想要穿出高级感,快来和这位姐妹学习,普通单品都能超神
- 勒布朗·詹姆斯|这就是超巨!半职业联赛席无空座,苦等詹姆斯12小时,球迷:都值得
- TCP/IP攻击详细解释
- 孕早期阴超有什么危害
- 孕12周前总共做15次b超