Quartz教程五--SimpleTrigger

最新推荐文章于 2023-02-21 22:45:12 发布
转载 最新推荐文章于 2023-02-21 22:45:12 发布 · 535 阅读
· 0
· 1
文章标签:

#Quartz

Quartz 专栏收录该内容
9 篇文章
订阅专栏
本文详细介绍了Quartz中的SimpleTrigger,包括如何使用TriggerBuilder和SimpleScheduleBuilder创建触发器,以及如何设置开始时间、重复间隔等关键属性。此外,还讲解了SimpleTrigger的Misfire策略及其配置方式。

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

目录
0. Quartz教程–快速入门
1. Quartz教程一–使用Quartz
2. Quartz教程二–API、Job与Trigger
3. Quartz教程三–Job与JobDetail介绍
4. Quartz教程四–Trigger介绍
5. Quartz教程五–SimpleTrigger
6. Quartz教程六–CronTrigger
7. Quartz教程七–TriggerListener和JobListener
8. Quartz教程八–SchedulerListener

SimpleTrigger可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。比如,你有一个trigger,你可以设置它在2015年1月13日的上午11:23:54准时触发,或者在这个时间点触发,并且每隔2秒触发一次,一共重复5次。

根据描述,你可能已经发现了,SimpleTrigger的属性包括:开始时间、结束时间、重复次数以及重复的间隔。这些属性的含义与你所期望的是一致的,只是关于结束时间有一些地方需要注意。

重复次数,可以是0、正整数,以及常量SimpleTrigger.REPEAT_INDEFINITELY。重复的间隔,必须是0,或者long型的正数,表示毫秒。注意,如果重复间隔为0,trigger将会以重复次数并发执行(或者以scheduler可以处理的近似并发数)。

如果你还不熟悉DateBuilder,了解后你会发现使用它可以非常方便地构造基于开始时间(或终止时间)的调度策略。

endTime属性的值会覆盖设置重复次数的属性值;比如,你可以创建一个trigger,在终止时间之前每隔10秒执行一次,你不需要去计算在开始时间和终止时间之间的重复次数,只需要设置终止时间并将重复次数设置为REPEAT_INDEFINITELY(当然,你也可以将重复次数设置为一个很大的值,并保证该值比trigger在终止时间之前实际触发的次数要大即可)。

SimpleTrigger实例通过TriggerBuilder设置主要的属性,通过SimpleScheduleBuilder设置与SimpleTrigger相关的属性。要使用这些builder的静态方法,需要静态导入:

import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.DateBuilder.*:

下面的例子,是基于简单调度(simple schedule)创建的trigger。建议都看一下,因为每个例子都包含一个不同的实现点:

指定时间开始触发,不重复:

SimpleTrigger trigger = (SimpleTrigger) newTrigger()
  .withIdentity("trigger1", "group1")
   .startAt(myStartTime)                   // some Date
 .forJob("job1", "group1")               // identify job with name, group strings
 .build();

指定时间触发,每隔10秒执行一次,重复10次:

trigger = newTrigger()
   .withIdentity("trigger3", "group1")
   .startAt(myTimeToStartFiring)  // if a start time is not given (if this line were omitted), "now" is implied
 .withSchedule(simpleSchedule()
        .withIntervalInSeconds(10)
        .withRepeatCount(10)) // note that 10 repeats will give a total of 11 firings
    .forJob(myJob) // identify job with handle to its JobDetail itself                   
    .build();

5分钟以后开始触发,仅执行一次:

trigger = (SimpleTrigger) newTrigger()
    .withIdentity("trigger5", "group1")
   .startAt(futureDate(5, IntervalUnit.MINUTE)) // use DateBuilder to create a date in the future
   .forJob(myJobKey) // identify job with its JobKey
    .build();

立即触发,每个5分钟执行一次,直到22:00:

trigger = newTrigger()
  .withIdentity("trigger7", "group1")
   .withSchedule(simpleSchedule()
        .withIntervalInMinutes(5)
     .repeatForever())
 .endAt(dateOf(22, 0, 0))
  .build();

在下一小时整点触发,每个2小时执行一次,一直重复:

trigger = newTrigger()
    .withIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
 .startAt(evenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
 .withSchedule(simpleSchedule()
        .withIntervalInHours(2)
       .repeatForever())
 // note that in this example, 'forJob(..)' is not called which is valid
  // if the trigger is passed to the scheduler along with the job  
    .build();

scheduler.scheduleJob(trigger, job);

请查阅TriggerBuilder和SimpleScheduleBuilder提供的方法,以便对上述示例中未提到的选项有所了解。

TriggerBuilder(以及Quartz的其它builder)会为那些没有被显式设置的属性选择合理的默认值。比如:如果你没有调用withIdentity(..)方法,TriggerBuilder会为trigger生成一个随机的名称;如果没有调用startAt(..)方法,则默认使用当前时间,即trigger立即生效。

SimpleTrigger Misfire策略

SimpleTrigger有几个misfire相关的策略,告诉quartz当misfire发生的时候应该如何处理。(Misfire策略参考教程四:Trigger介绍)。这些策略以常量的形式在SimpleTrigger中定义(JavaDoc中介绍了它们的功能)。这些策略包括:

SimpleTrigger的Misfire策略常量:

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT

回顾一下,所有的trigger都有一个Trigger.MISFIRE_INSTRUCTION_SMART_POLICY策略可以使用,该策略也是所有trigger的默认策略。

如果使用smart policy,SimpleTrigger会根据实例的配置及状态,在所有MISFIRE策略中动态选择一种Misfire策略。SimpleTrigger.updateAfterMisfire()的JavaDoc中解释了该动态行为的具体细节。

在使用SimpleTrigger构造trigger时,misfire策略作为基本调度(simple schedule)的一部分进行配置(通过SimpleSchedulerBuilder设置):

trigger = newTrigger()
  .withIdentity("trigger7", "group1")
   .withSchedule(simpleSchedule()
        .withIntervalInMinutes(5)
     .repeatForever()
      .withMisfireHandlingInstructionNextWithExistingCount())
   .build();
  • Lesson 5: SimpleTrigger

转载地址 http://nkcoder.xyz/2018/01/20/quartz-tutorial-05-simple-trigger-intro/
确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
神殇彡
关注 关注
  • 0
    点赞
  • 踩
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
作业调度框架 Quartz 学习笔记(二) -- 简单触发器(SimpleTrigger)
无他, 但手熟尔
03-04 3万+
简单回顾一下上一节学习到的 "HelloWorld " 1 创建一个job类,实现Job接口,覆盖 public void execute(JobExecutionContext context) 方法,在方法中写入你要执行的操作(数据导入/备份,轮询检查文件等)代码 2 创建一个主线程类, 获得 Scheduler 对象     SchedulerFactory sf = new Std
Quartz之SimpleTrigger
03-26
NULL 博文链接:https://liuzidong.iteye.com/blog/1119691
参与评论 您还未登录,请先 登录 后发表或查看评论
SimpleTrigger
heishuiloveyou的博客
02-21 268
但是,如果L出现在星期字段里,而且在前面有一个数值 X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五。如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y。如6#3表示当月的第三个星期五(6表示星期五,#3表示当前的第三个),而4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发。可用在所有字段中,表示对应时间域的每一个时刻,例如,***** 在分钟字段时,表示“每分钟”
quartz-2.3.0-distribution.tar.gz
03-27
Quartz 提供了多种 Trigger 类型,如 SimpleTrigger(单次或重复执行)和 CronTrigger(基于 Cron 表达式的时间间隔执行)。 3. **Scheduler(调度器)**:负责管理和执行 Jobs 以及 Triggers。通过 Scheduler 实例...
quartzall1.6.0jar_quartz-all-1.6.0.jar_
10-04
5. **灵活的调度**:Quartz允许你使用Cron表达式或SimpleTrigger来定义触发器,提供了非常灵活的时间间隔设置。Cron表达式可以模拟传统的Linux cron服务,而SimpleTrigger则用于简单的重复执行任务。 6. **集群支持...
quartz-all-1.6.0.jar包定时任务jar
06-21
Quartz提供多种Trigger类型,如SimpleTrigger(一次性执行或按固定间隔重复执行)、CronTrigger(根据Cron表达式执行,类似于Linux的crontab)等。开发者可以根据需求选择合适的Trigger类型,并设置其属性。 3. **...
quartz-2.3.0-distribution.zip
09-09
- 定义Trigger,决定Job的执行时间,可以是SimpleTrigger或CronTrigger。 - 将Job和Trigger注册到Scheduler,通过`Scheduler.scheduleJob()`方法。 - 启动Scheduler,通过`Scheduler.start()`方法。 6. **Quartz...
quartz和spring-quartz
03-18
在提供的文件中,“quartz的入门.doc”可能是Quartz的基础教程,介绍如何创建和调度Job;“spring的quartz应用.txt”可能包含Spring-Quartz的具体使用示例和注意事项;“spring-quartz-demo”可能是一个完整的示例...
Quartz-SimpleTrigger
litengbin的博客
04-10 666
 SimpleTrigger Trigger 就是触发器的意思,用来指定什么时间开始触发,触发多少次,每隔多久触发一次.SimpleTrigger 可以方便的实现一系列的触发机制。  下一个8秒的倍数 public class TestQuartz { public static void main(String[] args) throws Exception{ ...
【5】SimpleTrigger
jiaobuchong的专栏
09-27 761
参考链接http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-05.html
Lesson 5: SimpleTrigger
秋名山的放牛娃的博客
12-28 321
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-05.html SimpleTrigger should meet your scheduling needs if you need to have a job execute exactly once at a sp
Quartz入门 (二) SimpleTrigger
qq_39863541的博客
03-17 221
Trigger 就是触发器的意思,用来指定什么时间开始触发,触发多少次,每隔多久触发一次  SimpleTrigger 可以方便的实现一系列的触发机制。 1.下一个8秒的倍数开始运行: public class SimpleTriggerDemo { public static void main(String[] args) throws Exception{ ...
SimpleTrigger介绍
我是小坏
01-16 2159
项目地址: https://github.com/yuleiqq/quartz_example/tree/master/quartz_study 目录 简介 SimpleTrigger 失败的指令 简介 如果您需要在特定的时间点精确地执行一次作业,或者在特定的时间点执行一次作业,然后在特定的时间间隔重复一次,那么SimpleTrigger应该能够满足您的调度需...
[译]Quartz.NET 框架 教程(中文版)2.2.x 之第五课 SimpleTrigger
weixin_30666943的博客
05-25 159
第五课 SimpleTrigger 如果你需要在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务,SimpleTrigger应该能满足你的调度需求。例如,你希望触发器在2015年1月13日上午11:23:54准时触发,或是希望在那个时间点触发,然后再重复触发5次,每隔10秒一次。有了这样的描述,你就不会对SimpleTrigger包含的参数感到奇怪:开始执行时间,结...
java simpletrigger_浅谈Trigger(SimpleTrigger&CronTrigger)
weixin_39620845的博客
02-13 480
1.Trigger是什么Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的。2.Quartz中的Trigger3.触发器通用属性:JobKey:表示job实例的标识,触发器被触发时,该指定的job实例会执行StartTime:表示触发器的时间表首次被触发的时间,值类型是Java.util.DateEndTime:指定触发器的不再触发的时间,它的值类...
Quartz教程 第5课 SimpleTrigger
wusandi的专栏
10-22 575
第5课 SimpleTrigger 如果你需要在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务,SimpleTrigger应该能满足你的调度需求。例如,你希望触发器在2015年1月13日上午11:23:54准时触发,或是希望在那个时间点触发,然后再重复触发5次,每隔10秒一次。有了这样的描述,你就不会对SimpleTrigger包含的参数感到奇怪:开始执行时间,结束执行时
Java Quartz定时任务库quartz-all-1.6.0.jar详解
- Trigger:定义调度计划,如何时执行任务,可以是SimpleTrigger或CronTrigger。 - Scheduler:Quartz调度器,负责管理工作,如添加、删除、暂定和恢复Trigger,以及执行Job。 3. Quartz配置: Quartz可以通过多种...
神殇彡

博客等级

码龄15年
11
原创
11
点赞
33
收藏
7
粉丝
关注
私信

热门文章

  • Spring Cloud Gateway 内存溢出解决过程 18533
  • python django 添加前台页面 3043
  • python django模版渲染页面 2333
  • Spring Cloud Data Flow 中文版参考文档 2060
  • python django 工作流程 1598

分类专栏

  • Quartz
    9篇
  • JMS
    2篇
  • Python
    6篇
  • spring cloud
    1篇
  • gateway
    1篇
  • oom
    1篇

展开全部 收起

上一篇:
Quartz教程四--Trigger介绍
下一篇:
Quartz教程六--CronTrigger

最新评论

  • Spring Cloud Gateway 内存溢出解决过程

    寸发不生: 你用的是多少版本

  • Spring Cloud Gateway 内存溢出解决过程

    wangyulingreat: 为啥网上这些答案都一模一样?标点符号都不带改的

  • Spring Cloud Gateway 内存溢出解决过程

    -万里晴空-: 我升级到了 2.3.4,SR8 ,还是有问题

  • Spring Cloud Gateway 内存溢出解决过程

    faith云平台-中间件: 楼主我这里遇到一个问题,正常压测的时候,不管有问题的版本,还是新版本,在压测一段时间,内存都会趋于正常,但是我关掉,jemeter之后,就会上涨,遇到了吗

  • Spring Cloud Gateway 内存溢出解决过程

    洛水流川: 我升级到最新的版本 没这个问题了

大家在看

  • 手把手教你学Simulink——基于直流电机的建模与控制场景实例:直流电机带负载突变时的动态响应仿真 802
  • “我以为你懂了!”:三步根治职场模糊沟通,终结南辕北辙的交付(需求沟通中的理解偏差与解决方法) 510
  • 小项目实验 c++ 线程交叉场景试验 1816
  • C语言指针运算题
  • 基于Transformer的机器翻译——模型篇

最新文章

  • Spring Cloud Gateway 内存溢出解决过程
  • Spring Cloud Data Flow 中文版参考文档
  • Quartz教程八--SchedulerListener
2019年2篇
2018年9篇
2015年2篇
2013年7篇

目录

展开全部

收起

目录

展开全部

收起

上一篇:
Quartz教程四--Trigger介绍
下一篇:
Quartz教程六--CronTrigger

分类专栏

  • Quartz
    9篇
  • JMS
    2篇
  • Python
    6篇
  • spring cloud
    1篇
  • gateway
    1篇
  • oom
    1篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值