Quartz (quartz)
quartz)
quartz 端点提供由 Quartz Scheduler 管理的作业和触发器的信息。
获取已注册的组
作业和触发器在组中进行管理。要获取已注册的作业组和触发器组列表,请向 /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" ]
}
}
响应结构
响应包含已注册作业和触发器的组名称。下表描述了响应的结构:
| Path | Type | Description |
|---|---|---|
jobs.groups | Array | 作业组名称的数组。 |
triggers.groups | Array | 触发器组名称的数组。 |
获取已注册的 Job 名称
要获取已注册的作业名称列表,请向 /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" ]
}
}
}
响应结构
响应包含每个组注册的作业名称。下表描述了响应的结构:
| Path | Type | Description |
|---|---|---|
groups | Object | 以名称为键的作业组。 |
groups.*.jobs | Array | 作业名称的数组。 |
获取已注册的触发器名称
要获取已注册的触发器名称列表,请向 /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" ]
}
}
}
响应结构
响应包含每个组注册的触发器名称。下表描述了响应的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
groups | Object | 以名称为键的触发器组。 |
groups.*.paused | Boolean | 此触发器组是否已暂停。 |
groups.*.triggers | Array | 触发器名称的数组。 |
获取作业组的概览
要获取特定组中作业的概览,请向 /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"
}
}
}
响应结构
响应包含特定组中作业的概览。下表描述了响应的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
group | String | 组的名称。 |
jobs | Object | 以名称为键的作业详细信息。 |
jobs.*.className | String | 作业实现的全限定名称。 |
获取触发器组的概览
要获取特定组中触发器的概览,请向 /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: 1233
{
"group" : "tests",
"paused" : false,
"triggers" : {
"calendarInterval" : {
"once-a-week" : {
"previousFireTime" : "2020-12-02T14:00:00.000Z",
"nextFireTime" : "2020-12-08T14:00:00.000Z",
"priority" : 5,
"interval" : 604800000,
"timeZone" : "Etc/UTC"
}
},
"cron" : {
"3am-week" : {
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 3,
"expression" : "0 0 3 ? * 1,2,3,4,5",
"timeZone" : "Europe/Paris"
}
},
"custom" : {
"once-a-year-custom" : {
"previousFireTime" : "2020-07-14T16:00:00.000Z",
"nextFireTime" : "2021-07-14T16:00:00.000Z",
"priority" : 10,
"trigger" : "com.example.CustomTrigger@fdsfsd"
}
},
"dailyTimeInterval" : {
"tue-thu" : {
"priority" : 5,
"interval" : 3600000,
"daysOfWeek" : [ 3, 5 ],
"startTimeOfDay" : "09:00:00",
"endTimeOfDay" : "18:00:00"
}
},
"simple" : {
"every-day" : {
"nextFireTime" : "2020-12-04T12:00:00.000Z",
"priority" : 7,
"interval" : 86400000
}
}
}
}
响应结构
响应包含特定组中触发器的概览。触发器实现的具体细节可用。下表描述了响应的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
group | String | 组的名称。 |
paused | Boolean | 该组是否已暂停。 |
triggers.cron | Object | 按名称索引的 Cron 触发器(如果存在)。 |
triggers.simple | Object | 按名称索引的 Simple 触发器(如果存在)。 |
triggers.dailyTimeInterval | Object | 按名称索引的每日时间间隔触发器(如果存在)。 |
triggers.calendarInterval | Object | 按名称索引的日历间隔触发器(如果存在)。 |
triggers.custom | Object | 按名称索引的其他任意触发器(如果存在)。 |
triggers.cron.*.previousFireTime | String | 触发器上次触发的时间(如果存在)。 |
triggers.cron.*.nextFireTime | String | 触发器下次计划触发的时间(如果存在)。 |
triggers.cron.*.priority | Number | 当两个触发器计划在同一时间触发时,用于确定优先级。 |
triggers.cron.*.expression | String | 使用的 Cron 表达式。 |
triggers.cron.*.timeZone | String | 用于解析表达式的时区(如果存在)。 |
triggers.simple.*.previousFireTime | String | 触发器上次触发的时间(如果存在)。 |
triggers.simple.*.nextFireTime | String | 触发器下次计划触发的时间(如果存在)。 |
triggers.simple.*.priority | Number | 当两个触发器计划在同一时间触发时,用于确定优先级。 |
triggers.simple.*.interval | Number | 两次执行之间的间隔(以毫秒为单位)。 |
triggers.dailyTimeInterval.*.previousFireTime | String | 触发器上次触发的时间(如果存在)。 |
triggers.dailyTimeInterval.*.nextFireTime | String | 触发器下次计划触发的时间(如果存在)。 |
triggers.dailyTimeInterval.*.priority | Number | 当两个触发器计划在同一时间触发时,用于确定优先级。 |
triggers.dailyTimeInterval.*.interval | Number | 为计算下一次触发重复时间,在触发时间上增加的间隔(以毫秒为单位)。 |
triggers.dailyTimeInterval.*.daysOfWeek | Array | 触发器将在此数组指定的星期几触发。 |
triggers.dailyTimeInterval.*.startTimeOfDay | String | 在给定间隔内开始触发的时间(如果存在)。 |
triggers.dailyTimeInterval.*.endTimeOfDay | String | 在给定间隔内完成触发的时间(如果存在)。 |
triggers.calendarInterval.*.previousFireTime | String | 触发器上次触发的时间(如果存在)。 |
triggers.calendarInterval.*.nextFireTime | String | 触发器下次计划触发的时间(如果存在)。 |
triggers.calendarInterval.*.priority | Number | 当两个触发器计划在同一时间触发时,用于确定优先级。 |
triggers.calendarInterval.*.interval | Number | 为计算下一次触发重复时间,在触发时间上增加的间隔(以毫秒为单位)。 |
triggers.calendarInterval.*.timeZone | String | 执行时间计算所使用的时区(如果存在)。 |
triggers.custom.*.previousFireTime | String | 触发器上次触发的时间(如果存在)。 |
triggers.custom.*.nextFireTime | String | 触发器下次计划触发的时间(如果存在)。 |
triggers.custom.*.priority | Number | 当两个触发器计划在同一时间触发时,用于确定优先级。 |
triggers.custom.*.trigger | String | 自定义触发器实例的 toString 表示形式。 |
获取 Job 的详细信息
要获取特定作业的详细信息,请向 /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: 594
{
"className" : "org.springframework.scheduling.quartz.DelegatingJob",
"data" : {
"password" : "secret",
"user" : "admin"
},
"description" : "A sample job",
"durable" : false,
"group" : "samples",
"name" : "jobOne",
"requestRecovery" : false,
"triggers" : [ {
"group" : "samples",
"name" : "every-day",
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-04T12:00:00.000Z",
"priority" : 7
}, {
"group" : "samples",
"name" : "3am-weekdays",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 3
} ]
}
如果数据映射中的某个键被识别为敏感信息,其值将被清理。
响应结构
响应包含作业的完整详细信息,包括与其关联的触发器的摘要(如果有)。触发器按下次触发时间和优先级排序。下表描述了响应的结构:
| Path | Type | Description |
|---|---|---|
group | String | 组的名称。 |
name | String | 作业的名称。 |
description | String | 作业的描述(如果有)。 |
className | String | 作业实现的全限定类名。 |
durable | Boolean | 作业在成为孤儿后是否应继续保留存储。 |
requestRecovery | Boolean | 如果遇到“恢复”或“故障转移”情况,是否应重新执行作业。 |
data.* | String | 作业数据映射,以键值对形式表示(如果有)。 |
triggers | Array | 与作业关联的触发器数组(如果有)。 |
triggers.[].group | String | 触发器组的名称。 |
triggers.[].name | String | 触发器的名称。 |
triggers.[].previousFireTime | String | 触发器上次触发的时间(如果有)。 |
triggers.[].nextFireTime | String | 触发器下次计划触发的时间(如果有)。 |
triggers.[].priority | Number | 如果两个触发器具有相同的计划触发时间,则使用的优先级。 |
按需触发 Quartz 作业
要触发特定的 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
{
"className" : "org.springframework.scheduling.quartz.DelegatingJob",
"group" : "samples",
"name" : "jobOne",
"triggerTime" : "2026-01-22T12:43:50.577927277Z"
}
请求结构
请求指定了与特定作业关联的期望 state。发送带有 "state": "running" 主体的 HTTP 请求表示应立即运行该作业。下表描述了请求的结构:
| Path | Type | Description |
|---|---|---|
state | String | 作业的期望状态。 |
响应结构
响应包含已触发作业的详细信息。下表描述了响应的结构:
| Path | Type | Description |
|---|---|---|
group | String | 组的名称。 |
name | String | 作业的名称。 |
className | String | 作业实现类的全限定名。 |
triggerTime | String | 作业触发的时间。 |
获取触发器的详细信息
要获取特定触发器的详细信息,请向 /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对应其他任意触发器实现
下表描述了响应中通用元素的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
group | String | 组的名称。 |
name | String | 触发器的名称。 |
description | String | 触发器的描述(如果有)。 |
state | String | 触发器的状态(NONE、NORMAL、PAUSED、COMPLETE、ERROR、BLOCKED)。 |
type | String | 触发器的类型(calendarInterval、cron、custom、dailyTimeInterval、simple)。决定包含类型特定详细信息的对象的键。 |
calendarName | String | 与此 Trigger 关联的日历名称(如果有)。 |
startTime | String | Trigger 应生效的时间(如果有)。 |
endTime | String | Trigger 应停止重复的时间,无论是否还有剩余重复次数(如果有)。 |
previousFireTime | String | 触发器上次触发的时间(如果有)。 |
nextFireTime | String | Trigger 计划下次触发的时间(如果有)。 |
priority | Number | 如果两个触发器具有相同的计划触发时间,则使用的优先级。 |
finalFireTime | String | Trigger 将最后一次触发的时间(如果有)。 |
data | Object | 按名称键控的 Job 数据映射(如果有)。 |
calendarInterval | Object | 日历时间间隔触发器详细信息(如果有)。当 type 为 calendarInterval 时存在。 |
custom | Object | 自定义触发器详细信息(如果有)。当 type 为 custom 时存在。 |
cron | Object | Cron 触发器详细信息(如果有)。当 type 为 cron 时存在。 |
dailyTimeInterval | Object | 每日时间间隔触发器详细信息(如果有)。当 type 为 dailyTimeInterval 时存在。 |
simple | Object | 简单触发器详细信息(如果有)。当 type 为 simple 时存在。 |
Cron Trigger 响应结构
cron 触发器定义了用于确定其触发时间的 cron 表达式。此类触发器实现的响应结果类似于以下内容:
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 518
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "cron",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000Z",
"endTime" : "2020-12-30T03:00:00.000Z",
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 3,
"finalFireTime" : "2020-12-30T02:00:00.000Z",
"data" : { },
"cron" : {
"expression" : "0 0 3 ? * 1,2,3,4,5",
"timeZone" : "Europe/Paris"
}
}
响应的大部分内容对所有触发器类型都是通用的。通用元素的响应结构已在之前描述。下表描述了响应中特定于 cron 触发器的部分的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
cron | Object | Cron 触发器的特定详细信息。 |
cron.expression | String | 要使用的 Cron 表达式。 |
cron.timeZone | String | 用于解析表达式的时区(如果有的话)。 |
Simple Trigger 响应结构
一个简单的触发器用于在指定的时间点触发一个 Job,并可选择以指定的间隔重复执行。此类触发器实现的响应结果类似于以下内容:
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 524
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "simple",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000Z",
"endTime" : "2020-12-30T03:00:00.000Z",
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 7,
"finalFireTime" : "2020-12-29T17:00:00.000Z",
"data" : { },
"simple" : {
"interval" : 86400000,
"repeatCount" : -1,
"timesTriggered" : 0
}
}
响应的大部分内容对所有触发器类型都是通用的。通用元素的响应结构已在之前描述。下表描述了响应中特定于简单触发器的部分的结构:
| Path | Type | Description |
|---|---|---|
simple | Object | Simple trigger 的具体细节。 |
simple.interval | Number | 两次执行之间的间隔,单位为毫秒。 |
simple.repeatCount | Number | trigger 应重复的次数,-1 表示无限重复。 |
simple.timesTriggered | Number | trigger 已触发的次数。 |
每日时间间隔触发器响应结构
每日时间间隔触发器用于根据每日重复的时间间隔触发 Job。此类触发器实现的响应结果类似于以下内容:
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 642
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "PAUSED",
"type" : "dailyTimeInterval",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000Z",
"endTime" : "2020-12-30T03:00:00.000Z",
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 5,
"finalFireTime" : "2020-12-30T18:00:00.000Z",
"data" : { },
"dailyTimeInterval" : {
"interval" : 3600000,
"daysOfWeek" : [ 3, 5 ],
"startTimeOfDay" : "09:00:00",
"endTimeOfDay" : "18:00:00",
"repeatCount" : -1,
"timesTriggered" : 0
}
}
响应的大部分内容对所有触发器类型都是通用的。通用元素的响应结构已在之前描述过。下表描述了特定于每日时间间隔触发器的响应部分的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
dailyTimeInterval | Object | 每日时间间隔触发器的特定详情。 |
dailyTimeInterval.interval | Number | 以毫秒为单位的间隔,添加到触发时间以计算下一次触发重复的时间。 |
dailyTimeInterval.daysOfWeek | Array | 触发器应在其上触发的一周中的天数组。 |
dailyTimeInterval.startTimeOfDay | String | 如果有指定间隔,则从一天中的该时间开始触发。 |
dailyTimeInterval.endTimeOfDay | String | 如果有指定间隔,则在一天中的该时间停止触发。 |
dailyTimeInterval.repeatCount | Number | 触发器应重复的次数,或 -1 表示无限重复。 |
dailyTimeInterval.timesTriggered | Number | 触发器已触发的次数。 |
Calendar Interval Trigger 响应结构
日历间隔触发器(calendar interval trigger)用于根据重复的日历时间间隔触发 Job。此类触发器实现的响应结果类似于以下内容:
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 644
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger",
"state" : "NORMAL",
"type" : "calendarInterval",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000Z",
"endTime" : "2020-12-30T03:00:00.000Z",
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 5,
"finalFireTime" : "2020-12-28T17:00:00.000Z",
"data" : { },
"calendarInterval" : {
"interval" : 604800000,
"timeZone" : "Etc/UTC",
"timesTriggered" : 0,
"preserveHourOfDayAcrossDaylightSavings" : false,
"skipDayIfHourDoesNotExist" : false
}
}
响应的大部分内容对所有触发器类型都是通用的。通用元素的响应结构已在之前描述。下表描述了特定于日历间隔触发器的响应部分的结构:
| 路径 | 类型 | 描述 |
|---|---|---|
calendarInterval | Object | 日历间隔触发器的特定详情。 |
calendarInterval.interval | Number | 以毫秒为单位的间隔,加到触发时间上以计算下一次触发重复的时间。 |
calendarInterval.timeZone | String | 执行时间计算时所用的时区(如果有的话)。 |
calendarInterval.timesTriggered | Number | 触发器已触发的次数。 |
calendarInterval.preserveHourOfDayAcrossDaylightSavings | Boolean | 是否在夏令时转换期间仍按同一天中的同一时间触发。 |
calendarInterval.skipDayIfHourDoesNotExist | Boolean | 如果某天不存在指定的小时,是否跳过该天。 |
自定义触发器响应结构
自定义触发器是任何其他实现。此类触发器实现的响应结果类似于以下内容:
HTTP/1.1 200 OK
Content-Type: application/vnd.spring-boot.actuator.v3+json
Content-Length: 437
{
"group" : "samples",
"name" : "example",
"description" : "Example trigger.",
"state" : "NORMAL",
"type" : "custom",
"calendarName" : "bankHolidays",
"startTime" : "2020-11-30T17:00:00.000Z",
"endTime" : "2020-12-30T03:00:00.000Z",
"previousFireTime" : "2020-12-04T03:00:00.000Z",
"nextFireTime" : "2020-12-07T03:00:00.000Z",
"priority" : 10,
"custom" : {
"trigger" : "com.example.CustomTrigger@fdsfsd"
}
}
响应的大部分内容对所有触发器类型都是通用的。通用元素的响应结构已在之前描述。下表描述了响应中特定于自定义触发器部分的结构:
| Path | Type | Description |
|---|---|---|
custom | Object | 自定义触发器的特定详细信息。 |
custom.trigger | String | 自定义触发器实例的 toString 表示形式。 |