Documentation
¶
Index ¶
Constants ¶
View Source
const ( // ScheduleCron cron 表达式调度,ScheduleConf 为 cron 表达式。 // 支持 5 段(分 时 日 月 周)、6 段(秒 分 时 日 月 周)以及 @every 5m / @daily 等描述符 ScheduleCron = "cron" // ScheduleFixedRate 固定频率调度,ScheduleConf 为间隔秒数,从上次「开始执行」时刻起算 ScheduleFixedRate = "fixed_rate" // ScheduleFixedDelay 固定延迟调度,ScheduleConf 为间隔秒数,从上次「执行结束」时刻起算 ScheduleFixedDelay = "fixed_delay" // ScheduleOnce 一次性调度,ScheduleConf 为执行时间(2006-01-02 15:04:05),执行后自动停止 ScheduleOnce = "once" )
调度类型
View Source
const ( // BlockSerial 串行排队:等待上一次执行完成后依次执行 BlockSerial = "serial" // BlockDiscard 丢弃后续:上次仍在执行则直接丢弃本次调度 BlockDiscard = "discard" // BlockConcurrent 并发执行:不做任何限制,允许多实例同时执行 BlockConcurrent = "concurrent" // BlockCover 覆盖之前:取消正在执行的任务(触发其 context 取消),立即执行本次 BlockCover = "cover" )
阻塞处理策略:上一次调度尚未执行完毕时,本次调度的处理方式
View Source
const ( // MisfireDoNothing 忽略错过的调度,等待下一个调度时刻 MisfireDoNothing = "do_nothing" // MisfireFireNow 立即补偿执行一次 MisfireFireNow = "fire_now" )
调度过期策略:服务停机等原因导致错过了调度时刻
View Source
const ( // StatusStopped 已停止 StatusStopped = 0 // StatusRunning 运行中 StatusRunning = 1 )
任务状态
View Source
const ( // TriggerCron 调度器自动触发 TriggerCron = "cron" // TriggerManual 人工手动触发 TriggerManual = "manual" // TriggerRetry 失败重试触发 TriggerRetry = "retry" // TriggerMisfire 调度过期补偿触发 TriggerMisfire = "misfire" )
触发类型
View Source
const ( // LogRunning 执行中 LogRunning = 0 // LogSuccess 执行成功 LogSuccess = 1 // LogFailed 执行失败 LogFailed = 2 // LogTimeout 执行超时 LogTimeout = 3 // LogBlocked 因阻塞策略被丢弃 LogBlocked = 4 // LogCanceled 被覆盖策略取消 LogCanceled = 5 )
执行结果状态
View Source
const ( DriverMysql = "mysql" DriverPostgres = "postgres" DriverSqlite = "sqlite" )
支持的存储驱动
Variables ¶
This section is empty.
Functions ¶
func Register ¶
func Register(name string, h HandlerFunc)
Register 注册一个定时任务执行器。 name 需与数据库任务表中的 handler_name 一致,重复注册会覆盖并打印警告。 建议在 app 启动、Job 模块 Start 之前完成所有执行器注册。
job.Register("syncUserJob", func(ctx *job.Context) error {
ctx.Log("开始同步用户, 参数=%s", ctx.Param)
return userService.Sync(ctx.Ctx())
})
func RouterGroup ¶
func RouterGroup(g *gin.RouterGroup)
RouterGroup 返回可挂载到任意 Gin 路由组下的定时任务管理接口。
提供的接口(以 group 的前缀为 /job 为例):
GET /job/list 任务列表(分页,支持 group/keyword/status 过滤) GET /job/:id 任务详情 POST /job 新增任务 PUT /job 更新任务 DELETE /job/:id 删除任务 POST /job/:id/start 启动任务 POST /job/:id/stop 停止任务 POST /job/:id/trigger 手动触发一次 GET /job/handlers 已注册执行器列表 GET /job/log 执行日志列表(分页)
用法:
job.GetManager() // 确保已初始化
r := router.Group("/job")
job.RouterGroup(r)
Types ¶
type Config ¶
type Config struct {
// Enabled 是否启用定时任务模块
Enabled bool
// DbName 多库(multidb)模式下指定使用的库名,单库模式留空
DbName string
// Initdb 是否自动建表(AutoMigrate),默认 true
Initdb bool
// TablePrefix 表名前缀,默认 mgin_
TablePrefix string
// ScanInterval 调度扫描间隔(秒),默认 1
ScanInterval int
// RefreshInterval 从数据库同步任务配置的间隔(秒),默认 30
RefreshInterval int
// LogRetainDays 执行日志保留天数,0 表示不清理,默认 30
LogRetainDays int
// MaxConcurrent 全局最大并发执行任务数,默认 50
MaxConcurrent int
// MaxSerialQueue serial 阻塞策略下的最大排队数,超出则丢弃,默认 10
MaxSerialQueue int
// Timezone 调度时区,默认 Local,例如 Asia/Shanghai
Timezone string
}
Config 定时任务管理器配置,对应 application.yml 中 go.job 节点
type Context ¶
type Context struct {
// JobId 任务 ID
JobId int64
// JobName 任务名称
JobName string
// JobGroup 任务分组
JobGroup string
// HandlerName 执行器名称
HandlerName string
// Param 任务参数,来自任务配置的 JobParam 或手动触发时传入的参数
Param map[string]interface{}
// LogId 本次执行的日志 ID
LogId int64
// TriggerType 触发类型:cron / manual / retry / misfire
TriggerType string
// RetryNum 当前重试次数,0 表示首次执行
RetryNum int
// contains filtered or unexported fields
}
Context 定时任务执行上下文,作为参数传递给 HandlerFunc
type HandlerFunc ¶
HandlerFunc 定时任务执行体。 返回 error 即视为本次执行失败,会按任务配置的重试次数进行重试。 实现中应当监听 ctx.Done() 以支持超时中断与 cover 策略取消。
type JobInfo ¶
type JobInfo struct {
ID int64 `gorm:"primaryKey;autoIncrement;comment:任务ID" json:"id" form:"id"`
JobName string `` /* 136-byte string literal not displayed */
JobGroup string `gorm:"column:job_group;size:50;index;default:DEFAULT;comment:任务分组" json:"jobGroup" form:"jobGroup"`
Description string `gorm:"column:description;size:255;comment:任务描述" json:"description" form:"description"`
ScheduleType string `` /* 151-byte string literal not displayed */
ScheduleConf string `` /* 165-byte string literal not displayed */
HandlerName string `` /* 178-byte string literal not displayed */
JobParam map[string]interface{} `gorm:"column:job_param;type:text;serializer:json;comment:任务执行参数" json:"jobParam" form:"jobParam"`
Timeout int `gorm:"column:timeout;default:0;comment:执行超时时间(秒),0为不限制" json:"timeout" form:"timeout"`
RetryCount int `gorm:"column:retry_count;default:0;comment:失败重试次数" json:"retryCount" form:"retryCount"`
RetryInterval int `gorm:"column:retry_interval;default:0;comment:失败重试间隔(秒)" json:"retryInterval" form:"retryInterval"`
BlockStrategy string `` /* 146-byte string literal not displayed */
MisfireStrategy string `` /* 150-byte string literal not displayed */
Status int `gorm:"column:status;default:0;index;comment:任务状态 1运行中 0已停止" json:"status" form:"status"`
LastFireTime *time.Time `gorm:"column:last_fire_time;comment:上次调度时间" json:"lastFireTime"`
NextFireTime *time.Time `gorm:"column:next_fire_time;comment:下次调度时间" json:"nextFireTime"`
TriggerCount int64 `gorm:"column:trigger_count;default:0;comment:累计调度次数" json:"triggerCount"`
SuccessCount int64 `gorm:"column:success_count;default:0;comment:累计成功次数" json:"successCount"`
FailCount int64 `gorm:"column:fail_count;default:0;comment:累计失败次数" json:"failCount"`
Remark string `gorm:"column:remark;size:255;comment:备注" json:"remark" form:"remark"`
CreateAt time.Time `gorm:"column:create_at;autoCreateTime;comment:创建时间" json:"createAt"`
UpdateAt time.Time `gorm:"column:update_at;autoUpdateTime;comment:更新时间" json:"updateAt"`
}
JobInfo 定时任务配置表。
注意:本表的字段刻意不使用 MySQL 方言专属类型(如 tinyint / datetime), 全部交由 GORM 按当前数据库方言自动推导,以保证同一套模型可在 MySQL / PostgreSQL / SQLite 三种数据库上正确建表。
type JobLog ¶
type JobLog struct {
ID int64 `gorm:"primaryKey;autoIncrement;comment:日志ID" json:"id" form:"id"`
JobId int64 `gorm:"column:job_id;index;not null;comment:任务ID" json:"jobId" form:"jobId"`
JobName string `gorm:"column:job_name;size:100;index;comment:任务名称" json:"jobName" form:"jobName"`
JobGroup string `gorm:"column:job_group;size:50;index;comment:任务分组" json:"jobGroup" form:"jobGroup"`
HandlerName string `gorm:"column:handler_name;size:100;comment:执行器名称" json:"handlerName"`
JobParam map[string]interface{} `gorm:"column:job_param;type:text;serializer:json;comment:本次执行参数" json:"jobParam"`
TriggerType string `gorm:"column:trigger_type;size:20;comment:触发类型 cron|manual|retry|misfire" json:"triggerType"`
Status int `` /* 145-byte string literal not displayed */
StartAt time.Time `gorm:"column:start_at;index;comment:开始执行时间" json:"startAt"`
EndAt *time.Time `gorm:"column:end_at;comment:执行结束时间" json:"endAt"`
CostMs int64 `gorm:"column:cost_ms;default:0;comment:执行耗时(毫秒)" json:"costMs"`
RetryNum int `gorm:"column:retry_num;default:0;comment:当前为第几次重试,0表示首次执行" json:"retryNum"`
Message string `gorm:"column:message;type:text;comment:执行结果信息或错误原因" json:"message"`
LogDetail string `gorm:"column:log_detail;type:text;comment:任务内通过 ctx.Log 输出的执行明细" json:"logDetail"`
Hostname string `gorm:"column:hostname;size:100;comment:执行该任务的实例主机名" json:"hostname"`
CreateAt time.Time `gorm:"column:create_at;autoCreateTime;index;comment:创建时间" json:"createAt"`
}
JobLog 定时任务执行日志表
Click to show internal directories.
Click to hide internal directories.