跳到主要内容
版本:4.0.2

Quartz (quartz)

QWen Max 中英对照 Quartz (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" ]
}
}

响应结构

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

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

获取已注册的 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" ]
}
}
}

响应结构

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

PathTypeDescription
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"
}
}
}

响应结构

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

路径类型描述
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: 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
}
}
}
}

响应结构

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

路径类型描述
groupString组的名称。
pausedBoolean该组是否已暂停。
triggers.cronObject按名称索引的 Cron 触发器(如果存在)。
triggers.simpleObject按名称索引的 Simple 触发器(如果存在)。
triggers.dailyTimeIntervalObject按名称索引的每日时间间隔触发器(如果存在)。
triggers.calendarIntervalObject按名称索引的日历间隔触发器(如果存在)。
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 表示形式。

获取 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
} ]
}

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

响应结构

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

PathTypeDescription
groupString组的名称。
nameString作业的名称。
descriptionString作业的描述(如果有)。
classNameString作业实现的全限定类名。
durableBoolean作业在成为孤儿后是否应继续保留存储。
requestRecoveryBoolean如果遇到“恢复”或“故障转移”情况,是否应重新执行作业。
data.*String作业数据映射,以键值对形式表示(如果有)。
triggersArray与作业关联的触发器数组(如果有)。
triggers.[].groupString触发器组的名称。
triggers.[].nameString触发器的名称。
triggers.[].previousFireTimeString触发器上次触发的时间(如果有)。
triggers.[].nextFireTimeString触发器下次计划触发的时间(如果有)。
triggers.[].priorityNumber如果两个触发器具有相同的计划触发时间,则使用的优先级。

按需触发 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 请求表示应立即运行该作业。下表描述了请求的结构:

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 对应其他任意触发器实现

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

路径类型描述
groupString组的名称。
nameString触发器的名称。
descriptionString触发器的描述(如果有)。
stateString触发器的状态(NONENORMALPAUSEDCOMPLETEERRORBLOCKED)。
typeString触发器的类型(calendarIntervalcroncustomdailyTimeIntervalsimple)。决定包含类型特定详细信息的对象的键。
calendarNameString与此 Trigger 关联的日历名称(如果有)。
startTimeStringTrigger 应生效的时间(如果有)。
endTimeStringTrigger 应停止重复的时间,无论是否还有剩余重复次数(如果有)。
previousFireTimeString触发器上次触发的时间(如果有)。
nextFireTimeStringTrigger 计划下次触发的时间(如果有)。
priorityNumber如果两个触发器具有相同的计划触发时间,则使用的优先级。
finalFireTimeStringTrigger 将最后一次触发的时间(如果有)。
dataObject按名称键控的 Job 数据映射(如果有)。
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: 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 触发器的部分的结构:

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

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
}
}

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

PathTypeDescription
simpleObjectSimple trigger 的具体细节。
simple.intervalNumber两次执行之间的间隔,单位为毫秒。
simple.repeatCountNumbertrigger 应重复的次数,-1 表示无限重复。
simple.timesTriggeredNumbertrigger 已触发的次数。

每日时间间隔触发器响应结构

每日时间间隔触发器用于根据每日重复的时间间隔触发 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
}
}

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

路径类型描述
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: 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
}
}

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

路径类型描述
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: 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"
}
}

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

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