Quartz所使用的表的说明

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日

相关文章

  • 关于python:为什么不能安装cpickle

    在Python 3.x版本中,cpickle是一个用于序列化和反序列化Python对象的模块。但在某些情况下,我们可能会遇到不能安装cpickle的问题。本文详细介绍为什么会出现这个问题以及如何解决它。 为什么不能安装cpickle 在Python 3.x版本中,cpickle已经被弃用,取而代之是pickle模块。因此,在Python 3.x版本中,我们不…

    other 2023年5月7日
    00
  • Mac键盘失灵怎么办?Mac键盘部分按键失灵解决方法

    Mac键盘失灵怎么办? 如果在使用 Mac 电脑时,发现部分键盘按键失灵,该怎么办呢?下面提供几种常见的解决方法。 方法一:清洁键盘 键盘上的灰尘、污渍等可能会导致键盘按键失灵,因此可以通过清洁键盘的方式解决。 首先将 Mac 电脑关机,然后将键盘翻转,轻敲键盘的背面以使灰尘等物质脱落。 使用尘刷或吸尘器,清除键盘表面的灰尘和脏污。 可以将一些易脱落的键帽从…

    other 2023年6月27日
    00
  • spark在windows下的安装

    Spark在Windows下的安装 Apache Spark是一个流行的开源分布式计算框架,它可以用于处理大规模数据集。在本文中,我们将详细介绍如何在Windows操作系统上安装配置Apache Spark。 步骤1:下载和安装Java 在安装Spark之前,我们需要先安装Java。我们可以从Oracle官网下载Java Development Kit(JD…

    other 2023年5月8日
    00
  • 网络安全渗透测试反序列化漏洞分析与复现工作

    很抱歉,由于当前平台的限制,我无法以标准的markdown格式文本回答您的问题。但是,我可以为您提供详细的攻略,包含两个示例说明。以下是关于网络安全渗透测试反序列化漏洞分析与复现工作的完整攻略: 1. 反序列化漏洞分析 反序列化漏洞是一种常见的安全漏洞,攻击者可以利用该漏洞执行恶意代码。以下是反序列化漏洞分析的步骤: 确定目标:选择要分析的应用程序或系统。 …

    other 2023年10月19日
    00
  • NBA2K16按键失灵怎么办 NBA2K16按键失灵问题的解决方法

    解决 NBA2K16 按键失灵的方法主要有以下几种: 1.检查键盘或手柄 按键失灵可能是因为键盘或手柄出了问题,因此我们需要检查它们是否正常工作。可以将键盘或手柄连接到其他设备上测试,看看是否存在问题。如果其他设备上也无法正常使用,可能需要更换键盘或手柄。 2.重新安装游戏 有时候游戏的文件出现错误或损坏,也会导致按键失灵等问题。这个时候可以尝试重新安装游戏…

    other 2023年6月27日
    00
  • css y轴溢出滚动条,x轴溢出显示

    下面是“CSS Y轴溢出滚动条,X轴溢出显示的完整攻略”的详细讲解,包括过程和两个示例等方面。 过程 步骤1:设置元素的宽度和高度 首先需要设置元素的宽度和高度,以便确定元素的大小。可以使用以下CSS代码来设置元素的宽度和高度: .element { width: 300px; height: 200px; } 步骤2:设置元素的溢出属性 接下来需要设置元素…

    other 2023年5月6日
    00
  • MySQL存储过程中变量的定义以及应用详解

    MySQL存储过程中变量的定义以及应用详解 MySQL存储过程是一种在数据库中存储和执行的一组SQL语句的集合。在存储过程中,我们可以使用变量来存储和操作数据。本攻略将详细讲解MySQL存储过程中变量的定义和应用。 变量的定义 在MySQL存储过程中,我们可以使用DECLARE语句来定义变量。DECLARE语句的语法如下: DECLARE variable_…

    other 2023年8月8日
    00
  • thinkPHP5.0框架URL访问方法详解

    ThinkPHP5.0框架URL访问方法详解 ThinkPHP5.0是一款流行的PHP开发框架,提供了灵活的URL访问方法。本攻略将详细介绍ThinkPHP5.0框架中的URL访问方法,并提供两个示例说明。 基本URL访问方法 ThinkPHP5.0框架中的URL访问方法基于路由规则,可以通过简单的配置实现灵活的URL访问。 1. PATHINFO模式 在P…

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