quartz中trigger简单小结

本文深入探讨了Quartz定时任务中常见的触发器类型,包括SimpleTrigger、CronTrigger、CalendarIntervalTrigger和DailyTimeIntervalTrigger的使用方法及misfire处理机制。通过具体示例,如每隔一小时或5秒触发任务,以及不同misfire处理策略的对比,帮助读者理解和掌握如何灵活配置定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

trigger:设置定时时间 常用的trigger:

SimpleTrigger:简单的触发器(个人理解间隔触发器)
CronTrigger:Cron表达式触发器
CalendarIntervalTrigger:日历触发器
DailyTimeIntervalTrigger:日期触发器

misfire参考文章

1.SimpleTrigger:

一 每隔一小时触发

SimpleScheduleBuilder.repeatHourlyForever(1)

二 misfire机制:

withMisfireHandlingInstructionFireNow
以当前时间为触发频率立即触发执行
执行至FinalTIme的剩余周期次数
以调度或恢复调度的时刻为基准的周期频率,FinalTime根据剩余次数和当前时间计算得到
调整后的FinalTime会略大于根据starttime计算的到的FinalTime值

withMisfireHandlingInstructionIgnoreMisfires
错过的全部执行,共执行RepeatCount+1次

withMisfireHandlingInstructionNextWithExistingCount
错过全部忽略,执行接下去的trigger

withMisfireHandlingInstructionNextWithRemainingCount
之前全部忽略,执行接下去的trigger

withMisfireHandlingInstructionNowWithExistingCount(默认)
立即执行一次,然后按照trigger继续执行

withMisfireHandlingInstructionNowWithRemainingCount
以当前时间为触发频率立即触发执行
执行至FinalTIme的剩余周期次数
以调度或恢复调度的时刻为基准的周期频率,FinalTime根据剩余次数和当前时间计算得到
调整后的FinalTime会略大于根据starttime计算的到的FinalTime值

2.CronTrigger:

一 每隔5秒触发一次
CronScheduleBuilder.cronSchedule(“0/5 * * * * * ?”)

二 misfire机制:
withMisfireHandlingInstructionDoNothing
错过的tirrger全部忽略,等待下次Cron触发频率到达时刻开始按照Cron频率依次执行

withMisfireHandlingInstructionIgnoreMisfires
错过的全部都执行,然后一直执行

withMisfireHandlingInstructionFireAndProceed(默认)
立即执行一次,然后按照Cron频率依次执行

2.DailyTimeIntervalTrigger:

DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule().withInterval(2, DateBuilder.IntervalUnit.MONTH);

QuartzTrigger 类是调度任务执行时间的关键组件之一。在 Quartz 中,`org.quartz.NthIncludedDayTrigger` 特别用于指定每隔特定天数运行某个作业(Job)的触发器。这个类允许你在特定的周期内选择某一天作为作业的执行日。 下面是一个简单的示例,展示了如何创建一个 `NthIncludedDayTrigger`: ```java // 引入所需的包 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.text.SimpleDateFormat; import java.util.Date; // 定义具体的间隔(比如每周一) int nthDay = 1; // 第一天 String dayOfWeek = "Monday"; // 周一 // 创建日期格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); // 获取当前日期 Date currentDate = new Date(); String currentDateString = sdf.format(currentDate); // 计算下一次满足条件的日期 Date nextExecutionDate = getNthDayAfter(currentDate, nthDay, dayOfWeek); // 创建 NthIncludedDayTrigger NthIncludedDayTrigger trigger = new NthIncludedDayTrigger(); trigger.setRepeatCount(Trigger.REPEAT_INDEFINITELY); // 设置无限循环 trigger.setStartAt(nextExecutionDate); // 设置首次执行时间 trigger.setNextFireTime(nextExecutionDate); trigger.setIntervalInMilliseconds(1000 * 60 * 60 * 24); // 每周一次,单位毫秒 trigger.setNthWeekday(nthDay); // 设置为周一 trigger.setFirstDayOfWeek(DayOfWeek.MONDAY); // 配合 nthDay 使用 // 启动 Quartz 安排器并设置触发器 StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); // 添加触发器到调度器 scheduler.scheduleJob(trigger, new JobDetail()); ``` 在这个示例中,我们首先计算出下次满足条件的日期(即下周一),然后创建一个 `NthIncludedDayTrigger` 并设置其属性。最后,我们将触发器添加到 Quartz 调度器中以安排任务执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值