# 定时任务
定时任务用于定义系统中需要定时执行的相关任务或者逻辑,如发送合同过期通知,定期归档数据等。
# 系统定时任务类型
系统支持以下三种类型的定时任务:
- 启动时执行的任务 (Run at Startup)
这种任务在系统启动时自动执行一次。适用于需要在系统启动后立即执行的初始化操作或数据处理任务。
使用场景举例:
加载系统配置、初始化与 OpcUa 服务器的连接、缓存预热等
- 一次性延迟执行任务 Schedule Task (One Time)
这种任务会预设为在未来某个时间执行一次。适用于需要延迟执行或在特定时间执行一次的任务。
使用场景举例:
发送提醒邮件、执行批量数据处理、系统维护操作等
- 周期性重复执行任务 (Cron Task)
这种任务使用 Springboot 的 Cron表达式 (opens new window) 来设置执行周期,可以按分钟、小时、天、周、月等周期循环执行。适用于需要定期重复执行的任务。
使用场景举例:
定期数据备份、缓存清理、统计监控等
我们的定时任务框架支持以上三种类型,可以根据实际需求灵活选择和配置。同时还提供了任务调度、监控、日志等管理功能。
# 启用逻辑
定时任务中可以设定 enableLogic, 用于决定定时任务是否需要运行,定时任务启用的动态 逻辑的输入和输出参数如下所述:
# 输入参数
变量名称 | 变量类型 | 描述 |
---|---|---|
triggerDatetime | java.time.LocalDateTime | 定时任务的触发时间 |
task | tech.muyan.dynamic.task.DynamicTask | 触发定时任务实例 |
application | grails.core.GrailsApplication | 当前的 grails 应用上下文 |
log | Closure<?> | 用于打印执行日志的 log 闭包 |
# 返回结果
Enable Logic 运行后的返回结果的结构如下
// 表示该 action 或 task 或 widget 是否启用
// Indicates whether this action or task or widget is enabled
[result: true | false]
1
2
2
# 核心逻辑
定时任务核心逻辑即定时任务运行时执行的具体代码,其输入和返回值如下所述:
# 输入参数
变量名称 | 变量类型 | 描述 |
---|---|---|
triggerDatetime | java.time.LocalDateTime | 定时任务的触发时间 |
task | tech.muyan.dynamic.task.DynamicTask | 触发定时任务实例 |
application | grails.core.GrailsApplication | 当前的 grails 应用上下文 |
log | Closure<?> | 用于打印执行日志的 log 闭包 |
# 返回结果
返回结果是一个 Map 结构, 如下是定时任务执行后的返回结果的结构:
return [
//执行结果,类型为文本
//Execution result, type is text
execResult: 'OK, Result'
]
1
2
3
4
2
3
4
# 定时任务重跑
定时任务重跑是可以通过手动触发的方式,针对某个执行周期的实例,重新运行一次该任务。
当重跑定时任务时,会使用原任务运行时的触发时间作为 triggerDatetime
参数。
触发方式为: 在定时任务执行记录(DynamicTaskExecRecord
)的列表页面选中某条执行记
录,执行重跑任务
操作。