# 定时任务

定时任务用于定义系统中需要定时执行的相关任务或者逻辑,如发送合同过期通知,定期归档数据等。

# 系统定时任务类型

系统支持以下三种类型的定时任务:

  • 启动时执行的任务 (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

# 核心逻辑

定时任务核心逻辑即定时任务运行时执行的具体代码,其输入和返回值如下所述:

# 输入参数

变量名称 变量类型 描述
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

# 定时任务重跑

定时任务重跑是可以通过手动触发的方式,针对某个执行周期的实例,重新运行一次该任务。 当重跑定时任务时,会使用原任务运行时的触发时间作为 triggerDatetime 参数。

触发方式为: 在定时任务执行记录(DynamicTaskExecRecord)的列表页面选中某条执行记 录,执行重跑任务操作。

Last Updated: 2024/12/4 13:00:56