QUARTZ系列之一-基础概念(Scheduler/Job/JobDetail/Trigger)

摘要:
调度器:调度器:调度器,没什么好说的。各种“ScheduleBuilder”类构建不同的调度器。触发器:1.1 SimpleTrigger:1.2 CronTrigger:1.2.1。功能:类似于日历的递归注释,子菜单“每周五”、“每周一和上午9:30”,甚至“每5分钟周一、周三和周五上午9:00至10:00”。1.2.2CRON表达式:百度1.2.3使用:使用TriggerBuilderdCronScheduleBuilder。要使用DSL样式的生成器,请使用静态端口:importstaticcorg.quartz.TriggerBuilder。*;importstaticorg.quartz.CronScheduleBuilder.*;importstaticorg.quartz.DateBuilder.*:每隔一分钟(每天晚上8点到5点之间)就会触发一次的生成器:trigger=newTrigger().withIdentity.withSchedule(cronSchedule(“00/28-17**?”))。forJob.build();1.2.4缺火描述:CronTrigger的缺火指令常量:Misfire_ Instruction_IGNORE_ Misfire_POLICY//javadoc没有此字段,但官方文档有此字段Misfire_Instruction_DO_NOTHING=2//1。更新下一次激发时间;2.本次不执行MISFIRE指令_ FIRE_ NOW=1//tobefirednow注意:1.触发。MISFIRE_ INSTRUCITON_ FIRE_ NOW治疗。

摘抄自quartz官方文档:

The key interfaces of the Quartz API are:

  • Scheduler - the main API for interacting with the scheduler.  (quartz提供的用来和调度器交互的API)
  • Job - an interface to be implemented by components that you wish to have executed by the scheduler.(你希望被调度的任务体)
  • JobDetail - used to define instances of Jobs.  (用来定义任务实例)
  • Trigger - a component that defines the schedule upon which a given Job will be executed. (定义了Job运行的调度时间表(即schedule,注意与scheduler的区别))
  • JobBuilder - used to define/build JobDetail instances, which define instances of Jobs.(job构建器,quartz特有的DSL)
  • TriggerBuilder - used to define/build Trigger instances.(trigger构建器,quartz特有的DSL)

Quartz provides “builder” classes that define a Domain Specific Language (or DSL, also sometimes referred to as a “fluent interface”).

quartz定义了一套DSL,其实也就是一套bulider模式。值得注意的是,JobBuilder的doc中有这样一句:

The builder will always try to keep itself in a valid state, with reasonable defaults set for calling build() at any point. 

For instance if you do not invoke <i>withIdentity(..)</i> a job name will be generated for you.

builder会努力使自己处于有效的状态。

Scheduler:

scheduler:调度器,没啥好讲的。various “ScheduleBuilder” classes build出各种不同的scheduler。

 Trigger:

1.1 SimpleTrigger:

1.2 CronTrigger:

1.2.1.特点:recurs based on calendar-like notions,such as "every Friday at noon","every weekday and 9:30 am",even "every 5 minutes between 9:00 am and 10:00 am on every Monday, Wednesday and Friday during January".

1.2.2 CRON表达式:自己百度

1.2.3 使用:

using TriggerBuilder (for the trigger’s main properties) and CronScheduleBuilder (for the CronTrigger-specific properties). 

To use these builders in a DSL-style, use static imports:

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

Build a trigger that will fire every other minute, between 8am and 5pm, every day:

  trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
    .forJob("myJob", "group1")
    .build();

1.2.4 Misfire说明:

Misfire Instruction Constants of CronTrigger:

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY                                   // java doc中未见此字段,但是官方文档有此字段
MISFIRE_INSTRUCTION_DO_NOTHING                        =    2                // 1. 更新next-fire-time;2.本次不执行
MISFIRE_INSTRUCTION_FIRE_NOW                          =    1               //  to be fired now

Note:1.也有Trigger.MISFIRE_INSTRUCTION_SMART_POLICY字段,当作MISFIRE_INSTRUCITON_FIRE_NOW 处理。

           2.行为的具体细节参考CronTrigger.updateAfterMisfire()方法

          3.使用方式:放到schedule中定义即可:

cronSchedule("0 0/2 8-17 * * ?")
        ..withMisfireHandlingInstructionFireAndProceed()

免责声明:文章转载自《QUARTZ系列之一-基础概念(Scheduler/Job/JobDetail/Trigger)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 搜索 把软键盘上的回车键改为搜索Jquery和JS获取ul中li标签下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基础概念总结(spring security、Quartz、JUnit测试)

1、Spring Security 的大体框架和原理 (1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求。 (2)在applicationContext.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。 (3)过滤器最上层为HttpSessionContextIntegrationFilt...

webpack4.x最详细入门讲解

前言 本文主要从webpack4.x入手,会对平时常用的Webpack配置一一讲解,各个功能点都有对应的详细例子,所以本文也比较长,但如果你能动手跟着本文中的例子完整写一次,相信你会觉得Webpack也不过如此。 一、什么是webpack,为什么使用它? 1.1 什么是webpack? 简单来说,它其实就是一个模块打包器。 1.2 为什么使用它? 如果像...

npm scripts

Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。 npm 允许在package.json文件里面,使用scripts字段定义脚本命令。 { // ... "scripts": { "build": "node build.js" } } 上面代码是package.json文件的一个片段,里面的scr...

【NS-3学习】ns3-模拟基础:关键概念,日志,命令行参数

前言 本篇博客先介绍在仿真过程中会使用到的一些关键概念,然后介绍便于调试仿真脚本的常用技术:日志、命令行参数。 关键概念 节点 在因特网术语中,主机(终端)是指任何一台连接到网络的计算设备。ns-3并非一个专门的因特网模拟器,而是一个网络模拟器。为此不采用术语“主机”,因为这个词太容易让人联想到因特网以及相关协议。因此,选用其他术语:节点。 可以将节点理...

Vuejs 使用 lib 库模式打包 umd 解决 NPM 包发布的问题

由于升级了 v0.2 版 GearCase 使用打包工具从 parcel 更换成 vue-cli 3.x。因此打包后发布 NPM 包的方式与之前有很大的差异,这也导致了在发布完 GearCase v0.2.2 版本之后,我自己在进行 NPM / Yarn 安装包时。根本无法通过之前文档的方式,进行引入并注册组件。后来我大概花费了两天的时间来解决这个问题。...

adb shell 查看系统属性(用来判断特殊的操作系统)

一般来讲,在android程序开发中进行需要判断设备类型和系统版本 1、设备类型判断(android.os.Build.MODEL) 比如判断属于Google Nexus 5,Nexus 7,MIUI v5, MIUI v6,三星设备,魅族设备等; 这类型的问题都使用的android.os.Build.MODEL来判断,android.os.Build.M...