Quartz所使用的表的说明

yizhihongxing

Quartz所使用的表的说明

Quartz是一个强大的开源任务调度框架,它可以用来定时执行计划任务。在Quartz中,表是一个非常关键的概念,它定义了Quartz如何计算一个任务的执行时间,同时也把任务的执行时间和执行频率从代码中解耦,使得任务的调度配置变得简单和灵活。本文将对Quartz所使用的表进行详细的说明。

表的通用格式

Quartz中的表是通过一个类似于cron表达式的字符串来描述的,它由7个字段组成,以空格分隔。具体格式如下:

[秒] [分] [小时] [日] [月] [周] [年]

其中,方括号中的部分是可选的。

在Quartz中,每个字段都可以使用通配符(*),也可以指定一个范围(range),使用逗号(,)来分隔多个取值,使用斜杠(/)指定取值的间隔,使用问号(?)来代表不关心的字段。

除了通配符以外,Quartz中的表还支持一些特殊字符:

  • “-” 表示范围,如“10-15”表示从10到15;
  • “/” 表示间隔,如“0/5”表示每隔5秒执行一次;
  • “L” 表示最后一个,只能出现在日期和星期的字段中。如“L”表示当月的最后一天,“6L”表示当月的最后一个星期五;
  • “W” 表示工作日,只能出现在日期字段中。如“15W”表示离指定日期最近的工作日;
  • “#” 表示第几个,只能出现在星期字段中。如“3#2”表示本月的第二个星期三;

Quartz所使用的表

在Quartz中,有两种类型的表:Trigger表和Calendar表。

Trigger表

Trigger表用于定义任务的执行时间和重复策略。Quartz中的触发器(trigger)可以分为3类:SimpleTrigger、CronTrigger和CalendarIntervalTrigger。

SimpleTrigger表达式的格式如下:

[秒] [开始时间] [结束时间] [重复次数] [重复间隔]

其中,开始时间和结束时间必须是一个绝对值的日期时间,重复次数和重复间隔可以使用“-1”和“0”来表示不重复或无限重复。例如,以下表达式表示在2022年1月1日8点执行一次任务,然后每隔5分钟再次执行,直到2022年1月1日10点结束:

0 0 8-10 ? 1 1/5 * 2022

CronTrigger表达式的格式如下:

[秒] [分] [小时] [日] [月] [周] [年]

这个表达式的各个字段含义和通用表达式一样,只不过可以使用Quartz独有的“?”字符,代表不关心的字段。例如,以下表达式表示在每个小时的第10分钟和第50分钟都执行一次任务:

0 10,50 * ? * * *

CalendarIntervalTrigger表达式的格式如下:

[开始时间] [结束时间] [重复间隔] [时间单位]

其中,时间单位可以是秒、分钟、小时、天、周或月,重复间隔是一个整数。例如,以下表达式表示从2022年1月1日开始,每隔7天执行一次任务,直到2022年12月31日结束:

0 0 0 1 1 ? * #2022-12-31 0/7

Calendar表

Calendar表用于定义Quartz的日历,它可以包含一些排除的日期或时间段,以便在任务调度时将其排除在外。例如,我们可以创建一个日历,将所有的工作日都排除在外,只在周末执行任务:

Calendar calendar = new DailyCalendar("08:00", "17:00");
calendar.setDaysExcluded(new boolean[] { false, false, true, true, true, true, false });
scheduler.addCalendar("workdayCalendar", calendar, false, false);
Trigger trigger = newTrigger().withIdentity("trigger1", "group1")
    .withSchedule(dailyTimeIntervalSchedule().withInterval(1, DAY).onEveryDay()
    .withIntervalInHours(1).startingDailyAt(TimeOfDay.hourAndMinuteOfDay(8, 0))
    .endingDailyAt(TimeOfDay.hourAndMinuteOfDay(17, 0)).inTimeZone(TimeZone.getTimeZone("GMT+8"))
    .onDaysOfTheWeek(SATURDAY, SUNDAY).onCalendar("workdayCalendar").build()).build();
scheduler.scheduleJob(jobDetail, trigger);

总结

Quartz中的表是非常强大和灵活的,它为任务调度带来了极大的便利。在开发中,我们需要根据实际需求,灵活地运用好Quartz的表达式,才能实现有效而高效的任务调度机制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Quartz所使用的表的说明 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • iPhone快速添加网址URL后缀技巧不需要一个一个的去输入

    iPhone快速添加网址URL后缀技巧攻略 在iPhone上,我们可以使用一些技巧来快速添加网址URL后缀,而不需要一个一个地输入。下面是一个完整的攻略,包含两个示例说明。 使用“.”快速添加.com后缀 打开Safari浏览器并进入网址输入栏。 输入网址的主体部分,例如 \”www.example\”。 在键盘上长按“.”键,会弹出一个快捷菜单。 在快捷菜…

    other 2023年8月5日
    00
  • VB实现的递归复制文件和搜索文件的代码分享

    VB实现递归复制文件和搜索文件的代码分享 介绍 在VB中,通过使用递归算法可以实现对文件的复制和搜索。递归算法是一种经典的计算机算法,它通过将问题的规模不断缩小,直到规模足够小的时候才直接解决问题。因此,使用递归算法可以让我们更高效、更方便地操作文件。 实现递归复制文件的代码 递归复制文件的代码中,我们使用了如下的VB函数: ‘ 复制文件 Public Su…

    other 2023年6月27日
    00
  • Swift语言中的一些访问控制设置详解

    Swift语言中的一些访问控制设置详解 什么是访问控制 在Swift语言中,有四个访问控制级别: open (最高访问权限,可以被任何实体访问) public (可以被任何模块访问) internal (只能在定义该实体的模块内部访问) fileprivate (只能在当前的Swift源文件内部访问) private (只能在定义该实体的作用域内访问) 我们…

    other 2023年6月26日
    00
  • 解决python递归函数及递归次数受到限制的问题

    解决 Python 递归函数及递归次数受到限制的问题有两种方法,分别为手动设置递归深度和使用尾递归。 手动设置递归深度 Python 中的默认递归深度为 1000,所以如果超出了默认深度时就会抛出递归异常。我们可以使用 sys 模块来手动设置递归深度。 import sys sys.setrecursionlimit(3000) # 修改递归深度为 3000…

    other 2023年6月27日
    00
  • C#实现对字符串进行大小写切换的方法

    Sure! 下面是使用C#实现对字符串进行大小写切换的方法的完整攻略: 方法一:使用内置函数 C#提供了内置函数来实现字符串的大小写切换。你可以使用ToUpper()函数将字符串转换为大写,使用ToLower()函数将字符串转换为小写。 下面是一个示例代码: string str = \"Hello World!\"; string up…

    other 2023年8月16日
    00
  • win11安装软件报错怎么办 win11安装软件提示错误的解决方法

    win11安装软件报错怎么办 1. 查看错误信息 在进行软件安装时,出现错误提示时,首先需要查看错误信息。根据提示信息,确定出现错误的原因,才能进行下一步的解决。 2. 确认软件是否兼容Win11 Win11是最新的操作系统,一些软件可能还没有适配该版本的系统。因此,需要确认软件是否兼容Win11。可以在软件官网或者相关论坛寻找解决方法。 3. 以管理员身份…

    other 2023年6月28日
    00
  • android 获取文件的扩展名和去掉文件扩展名的小例子

    当我们处理文件时,有时需要获取文件的扩展名或者去掉文件的扩展名。下面是一个使用Java语言的示例,演示如何获取文件的扩展名和去掉文件的扩展名。 示例1:获取文件的扩展名 String fileName = \"example.txt\"; String extension = \"\"; int dotIndex = …

    other 2023年10月13日
    00
  • Python基础教程之循环语句(for、while和嵌套循环)

    Python基础教程之循环语句(for、while和嵌套循环) 循环语句是编程中非常重要的一部分,它允许我们重复执行一段代码块,直到满足特定条件为止。Python提供了两种主要的循环语句:for循环和while循环。此外,我们还可以使用嵌套循环来在循环内部嵌套另一个循环。 1. for循环 for循环用于遍历一个可迭代对象(如列表、元组、字符串等)中的元素,…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部