跳到主要内容
版本:3.5.10

Quartz (quartz)

QWen Max 中英对照 Quartz (quartz) Quartz (quartz)

quartz 端点提供有关由 Quartz Scheduler 管理的作业和触发器的信息。

检索已注册的组

作业(Jobs)和触发器(triggers)按组进行管理。要获取已注册的作业组和触发器组的列表,请向 /actuator/quartz 发送一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz' -i -X GET

得到的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 120

{
"jobs" : {
"groups" : [ "samples", "tests" ]
},
"triggers" : {
"groups" : [ "samples", "DEFAULT" ]
}
}

响应结构

响应包含已注册作业和触发器的组名称。下表描述了响应的结构:

PathTypeDescription
jobs.groupsArray作业组名称的数组。
triggers.groupsArray触发器组名称的数组。

获取已注册的作业名称

要获取已注册的作业名称列表,请向 /actuator/quartz/jobs 发起一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/jobs' -i -X GET

得到的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 137

{
"groups" : {
"samples" : {
"jobs" : [ "jobOne", "jobTwo" ]
},
"tests" : {
"jobs" : [ "jobThree" ]
}
}
}

响应结构

响应包含每个组注册的作业名称。下表描述了响应的结构:

路径类型描述
groupsObject以名称为键的作业组。
groups.*.jobsArray作业名称的数组。

获取已注册的触发器名称

要获取已注册的触发器名称列表,请向 /actuator/quartz/triggers 发起一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/triggers' -i -X GET

得到的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 229

{
"groups" : {
"samples" : {
"paused" : false,
"triggers" : [ "3am-weekdays", "every-day", "once-a-week" ]
},
"DEFAULT" : {
"paused" : false,
"triggers" : [ "every-hour-tue-thu" ]
}
}
}

响应结构

响应中包含每个组注册的触发器名称。下表描述了响应的结构:

路径类型描述
groupsObject以名称为键的触发器组。
groups.*.pausedBoolean此触发器组是否已暂停。
groups.*.triggersArray触发器名称的数组。

获取作业组的概览

要获取特定组中作业的概览,请向 /actuator/quartz/jobs/{groupName} 发起一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/jobs/samples' -i -X GET

前面的示例检索了 samples 组中作业的摘要。返回的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 201

{
"group" : "samples",
"jobs" : {
"jobOne" : {
"className" : "org.springframework.scheduling.quartz.DelegatingJob"
},
"jobTwo" : {
"className" : "org.quartz.Job"
}
}
}

响应结构

响应包含特定组中作业的概览。下表描述了响应的结构:

路径(Path)类型(Type)描述(Description)
groupString组的名称。
jobsObject以作业名称为键的作业详细信息。
jobs.*.classNameString作业实现类的全限定名。

获取触发器组的概览

要获取特定组中触发器的概览,请向 /actuator/quartz/triggers/{groupName} 发起一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/triggers/tests' -i -X GET

前面的示例检索了 tests 组中触发器的摘要。返回的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 1268

{
"group" : "tests",
"paused" : false,
"triggers" : {
"cron" : {
"3am-week" : {
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 3,
"expression" : "0 0 3 ? * 1,2,3,4,5",
"timeZone" : "Europe/Paris"
}
},
"simple" : {
"every-day" : {
"nextFireTime" : "2020-12-04T12:00:00.000+00:00",
"priority" : 7,
"interval" : 86400000
}
},
"dailyTimeInterval" : {
"tue-thu" : {
"priority" : 5,
"interval" : 3600000,
"daysOfWeek" : [ 3, 5 ],
"startTimeOfDay" : "09:00:00",
"endTimeOfDay" : "18:00:00"
}
},
"calendarInterval" : {
"once-a-week" : {
"previousFireTime" : "2020-12-02T14:00:00.000+00:00",
"nextFireTime" : "2020-12-08T14:00:00.000+00:00",
"priority" : 5,
"interval" : 604800000,
"timeZone" : "Etc/UTC"
}
},
"custom" : {
"once-a-year-custom" : {
"previousFireTime" : "2020-07-14T16:00:00.000+00:00",
"nextFireTime" : "2021-07-14T16:00:00.000+00:00",
"priority" : 10,
"trigger" : "com.example.CustomTrigger@fdsfsd"
}
}
}
}

响应结构

响应包含特定组中触发器的概览。提供了触发器实现的具体细节。下表描述了响应的结构:

路径类型描述
groupString组的名称。
pausedBoolean该组是否已暂停。
triggers.cronObject按名称索引的 Cron 触发器(如果存在)。
triggers.simpleObject按名称索引的 Simple 触发器(如果存在)。
triggers.dailyTimeIntervalObject按名称索引的 DailyTimeInterval 触发器(如果存在)。
triggers.calendarIntervalObject按名称索引的 CalendarInterval 触发器(如果存在)。
triggers.customObject其他任意按名称索引的触发器(如果存在)。
triggers.cron.*.previousFireTimeString触发器上次触发的时间(如果存在)。
triggers.cron.*.nextFireTimeString触发器下次计划触发的时间(如果存在)。
triggers.cron.*.priorityNumber当两个触发器具有相同的计划触发时间时,用于确定优先级。
triggers.cron.*.expressionString使用的 Cron 表达式。
triggers.cron.*.timeZoneString用于解析表达式的时间时区(如果存在)。
triggers.simple.*.previousFireTimeString触发器上次触发的时间(如果存在)。
triggers.simple.*.nextFireTimeString触发器下次计划触发的时间(如果存在)。
triggers.simple.*.priorityNumber当两个触发器具有相同的计划触发时间时,用于确定优先级。
triggers.simple.*.intervalNumber两次执行之间的间隔(以毫秒为单位)。
triggers.dailyTimeInterval.*.previousFireTimeString触发器上次触发的时间(如果存在)。
triggers.dailyTimeInterval.*.nextFireTimeString触发器下次计划触发的时间(如果存在)。
triggers.dailyTimeInterval.*.priorityNumber当两个触发器具有相同的计划触发时间时,用于确定优先级。
triggers.dailyTimeInterval.*.intervalNumber添加到触发时间上的间隔(以毫秒为单位),用于计算下一次重复触发的时间。
triggers.dailyTimeInterval.*.daysOfWeekArray触发器将触发的星期几数组。
triggers.dailyTimeInterval.*.startTimeOfDayString在给定间隔内开始触发的时间(如果存在)。
triggers.dailyTimeInterval.*.endTimeOfDayString在给定间隔内停止触发的时间(如果存在)。
triggers.calendarInterval.*.previousFireTimeString触发器上次触发的时间(如果存在)。
triggers.calendarInterval.*.nextFireTimeString触发器下次计划触发的时间(如果存在)。
triggers.calendarInterval.*.priorityNumber当两个触发器具有相同的计划触发时间时,用于确定优先级。
triggers.calendarInterval.*.intervalNumber添加到触发时间上的间隔(以毫秒为单位),用于计算下一次重复触发的时间。
triggers.calendarInterval.*.timeZoneString执行时间计算所用的时区(如果存在)。
triggers.custom.*.previousFireTimeString触发器上次触发的时间(如果存在)。
triggers.custom.*.nextFireTimeString触发器下次计划触发的时间(如果存在)。
triggers.custom.*.priorityNumber当两个触发器具有相同的计划触发时间时,用于确定优先级。
triggers.custom.*.triggerString自定义触发器实例的 toString 表示形式。

获取作业的详细信息

要获取特定作业的详细信息,请向 /actuator/quartz/jobs/{groupName}/{jobName} 发起一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/jobs/samples/jobOne' -i -X GET

前面的示例检索了由 samples 组和 jobOne 名称标识的作业的详细信息。返回的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 609

{
"group" : "samples",
"name" : "jobOne",
"description" : "A sample job",
"className" : "org.springframework.scheduling.quartz.DelegatingJob",
"durable" : false,
"requestRecovery" : false,
"data" : {
"password" : "secret",
"user" : "admin"
},
"triggers" : [ {
"group" : "samples",
"name" : "every-day",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-04T12:00:00.000+00:00",
"priority" : 7
}, {
"group" : "samples",
"name" : "3am-weekdays",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 3
} ]
}

如果数据映射中的某个键被识别为敏感信息,其值将被清理。

响应结构

响应包含作业的完整详细信息,包括与其关联的触发器(如果有的话)的摘要。触发器按下次触发时间和优先级排序。下表描述了响应的结构:

路径(Path)类型(Type)描述(Description)
groupString任务组的名称。
nameString任务的名称。
descriptionString任务的描述(如果有)。
classNameString任务实现类的全限定名。
durableBoolean当任务变为孤立状态后,是否仍应保留在存储中。
requestRecoveryBoolean在发生“恢复”或“故障转移”情况时,是否应重新执行该任务。
data.*String任务数据映射(JobDataMap),以键值对形式表示(如果有)。
triggersArray与该任务关联的触发器数组(如果有)。
triggers.[].groupString触发器组的名称。
triggers.[].nameString触发器的名称。
triggers.[].previousFireTimeString触发器上次触发的时间(如果有)。
triggers.[].nextFireTimeString触发器下次计划触发的时间(如果有)。
triggers.[].priorityNumber当两个触发器具有相同的计划触发时间时,用于确定优先级。

按需触发 Quartz Job

要触发特定的 Quartz 作业,请向 /actuator/quartz/jobs/{groupName}/{jobName} 发起一个 POST 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/jobs/samples/jobOne' -i -X POST \
-H 'Content-Type: application/json' \
-d '{"state":"running"}'

前面的示例演示了如何触发一个属于 samples 组且名为 jobOne 的作业。

响应将类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 169

{
"group" : "samples",
"name" : "jobOne",
"className" : "org.springframework.scheduling.quartz.DelegatingJob",
"triggerTime" : "2026-01-22T08:01:02.372052221Z"
}

请求结构

该请求指定了与特定作业关联的期望 state。发送一个包含 "state": "running" 的 HTTP 请求体表示应立即运行该作业。下表描述了该请求的结构:

PathTypeDescription
stateString作业的期望状态。

响应结构

响应包含已触发作业的详细信息。下表描述了响应的结构:

PathTypeDescription
groupString组的名称。
nameString作业的名称。
classNameString作业实现类的全限定名。
triggerTimeString作业被触发的时间。

获取触发器的详细信息

要获取特定触发器的详细信息,请向 /actuator/quartz/triggers/{groupName}/{triggerName} 发起一个 GET 请求,如下列基于 curl 的示例所示:

$ curl 'http://localhost:8080/actuator/quartz/triggers/samples/example' -i -X GET

前面的示例检索了由 samples 组和 example 名称标识的触发器的详细信息。

通用响应结构

响应具有一个通用结构,以及一个特定于触发器类型的附加对象。目前支持五种类型:

  • cron 对应 CronTrigger

  • simple 对应 SimpleTrigger

  • dailyTimeInterval 对应 DailyTimeIntervalTrigger

  • calendarInterval 对应 CalendarIntervalTrigger

  • custom 对应任何其他 Trigger 实现

下表描述了响应中通用元素的结构:

路径(Path)类型(Type)描述(Description)
groupString组的名称。
nameString触发器的名称。
descriptionString触发器的描述(如果有)。
stateString触发器的状态(NONENORMALPAUSEDCOMPLETEERRORBLOCKED)。
typeString触发器的类型(calendarIntervalcroncustomdailyTimeIntervalsimple)。决定包含特定类型详细信息的对象的键。
calendarNameString与此触发器关联的日历名称(如果有)。
startTimeString触发器生效的时间(如果有)。
endTimeString触发器停止重复的时间,无论是否还有剩余重复次数(如果有)。
previousFireTimeString触发器上次触发的时间(如果有)。
nextFireTimeString触发器下次计划触发的时间(如果有)。
priorityNumber当两个触发器具有相同的计划触发时间时所使用的优先级。
finalFireTimeString触发器最后一次触发的时间(如果有)。
dataObject按名称键控的作业数据映射(如果有)。
calendarIntervalObject日历时间间隔触发器的详细信息(如果有)。当 typecalendarInterval 时存在。
customObject自定义触发器的详细信息(如果有)。当 typecustom 时存在。
cronObjectCron 触发器的详细信息(如果有)。当 typecron 时存在。
dailyTimeIntervalObject每日时间间隔触发器的详细信息(如果有)。当 typedailyTimeInterval 时存在。
simpleObject简单触发器的详细信息(如果有)。当 typesimple 时存在。

Cron Trigger 响应结构

一个 cron 触发器定义了用于确定其触发时间的 cron 表达式。此类触发器实现所产生的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 543

{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "cron",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 3,
"finalFireTime" : "2020-12-30T02:00:00.000+00:00",
"data" : { },
"cron" : {
"expression" : "0 0 3 ? * 1,2,3,4,5",
"timeZone" : "Europe/Paris"
}
}

大部分响应内容对所有触发器类型都是通用的。通用元素的响应结构已在前面描述过。下表描述了 cron 触发器特有的响应部分的结构:

路径类型描述
cronObjectCron 触发器的特定详细信息。
cron.expressionString要使用的 Cron 表达式。
cron.timeZoneString用于解析表达式的时间时区(如果有的话)。

Simple Trigger Response Structure

一个简单的触发器(trigger)用于在指定的时间点触发一个 Job,并可选择性地以指定的间隔重复执行。此类触发器实现所产生的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 549

{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "simple",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 7,
"finalFireTime" : "2020-12-29T17:00:00.000+00:00",
"data" : { },
"simple" : {
"interval" : 86400000,
"repeatCount" : -1,
"timesTriggered" : 0
}
}

大部分响应内容对所有触发器类型都是通用的。通用元素的响应结构已在前面描述过。下表描述了针对 Simple Trigger 特有的响应部分的结构:

路径类型描述
simpleObjectSimple trigger 的具体细节。
simple.intervalNumber两次执行之间的间隔时间(以毫秒为单位)。
simple.repeatCountNumber触发器应重复的次数,或设为 -1 表示无限重复。
simple.timesTriggeredNumber触发器已被触发的次数。

Daily Time Interval Trigger Response Structure

每日时间间隔触发器用于根据每天重复的时间间隔触发一个 Job。此类触发器实现所产生的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 667

{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "PAUSED",
"type" : "dailyTimeInterval",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 5,
"finalFireTime" : "2020-12-30T18:00:00.000+00:00",
"data" : { },
"dailyTimeInterval" : {
"interval" : 3600000,
"daysOfWeek" : [ 3, 5 ],
"startTimeOfDay" : "09:00:00",
"endTimeOfDay" : "18:00:00",
"repeatCount" : -1,
"timesTriggered" : 0
}
}

大部分响应内容对所有触发器类型都是通用的。通用元素的响应结构已在前面描述过。下表描述了每日时间间隔触发器(daily time interval triggers)特有的响应部分的结构:

路径(Path)类型(Type)描述(Description)
dailyTimeIntervalObject每日时间间隔触发器的具体细节。
dailyTimeInterval.intervalNumber以毫秒为单位的间隔,添加到触发时间上,用于计算下一次触发重复的时间。
dailyTimeInterval.daysOfWeekArray触发器应触发的星期几数组。
dailyTimeInterval.startTimeOfDayString在给定间隔内开始触发的时间(一天中的时间),如果有的话。
dailyTimeInterval.endTimeOfDayString在给定间隔内完成触发的时间(一天中的时间),如果有的话。
dailyTimeInterval.repeatCountNumber触发器应重复的次数,或者 -1 表示无限重复。
dailyTimeInterval.timesTriggeredNumber触发器已经触发的次数。

Calendar Interval Trigger 响应结构

日历间隔触发器(calendar interval trigger)用于根据重复的日历时间间隔触发 Job。此类触发器实现所产生的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 669

{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "calendarInterval",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 5,
"finalFireTime" : "2020-12-28T17:00:00.000+00:00",
"data" : { },
"calendarInterval" : {
"interval" : 604800000,
"timeZone" : "Etc/UTC",
"timesTriggered" : 0,
"preserveHourOfDayAcrossDaylightSavings" : false,
"skipDayIfHourDoesNotExist" : false
}
}

大部分响应内容对所有触发器类型都是通用的。通用元素的响应结构已在前文描述。下表描述了日历间隔触发器(calendar interval triggers)特有的响应部分的结构:

路径(Path)类型(Type)描述(Description)
calendarIntervalObject日历间隔触发器的特定详细信息。
calendarInterval.intervalNumber以毫秒为单位的间隔,用于在触发时间上增加以计算下一次触发重复的时间。
calendarInterval.timeZoneString执行时间计算所用的时区(如果有的话)。
calendarInterval.timesTriggeredNumber触发器已被触发的次数。
calendarInterval.preserveHourOfDayAcrossDaylightSavingsBoolean是否在夏令时转换期间仍保持每天在同一时间触发。
calendarInterval.skipDayIfHourDoesNotExistBoolean如果某一天中指定的小时不存在,是否跳过该天。

自定义触发器响应结构

自定义触发器是指任何其他实现方式。此类触发器实现所产生的响应类似于以下内容:

HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 457

{
"group" : "samples",
"name" : "example",
"description" : "Example trigger.",
"state" : "NORMAL",
"type" : "custom",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000+00:00",
"endTime" : "2020-12-30T03:00:00.000+00:00",
"previousFireTime" : "2020-12-04T03:00:00.000+00:00",
"nextFireTime" : "2020-12-07T03:00:00.000+00:00",
"priority" : 10,
"custom" : {
"trigger" : "com.example.CustomTrigger@fdsfsd"
}
}

大部分响应内容对所有触发器类型都是通用的。通用元素的响应结构已在前面描述过。下表描述了自定义触发器特有的响应部分的结构:

PathTypeDescription
customObject自定义触发器的特定详细信息。
custom.triggerString自定义触发器实例的 toString 表示形式。