返回介绍

定时任务

发布于 2024-08-12 12:46:24 字数 5816 浏览 0 评论 0 收藏 0

开放接口说明

接口地址 : gin-vue-admin/server/utils/timer/Timer

type Timer interface {
    // 寻找所有Cron
    FindCronList() map[string]*taskManager
    // 添加Task 方法形式以秒的形式加入
    AddTaskByFuncWithSecond(cronName string, spec string, fun func(), taskName string, option ...cron.Option) (cron.EntryID, error) // 添加Task Func以秒的形式加入
    // 添加Task 接口形式以秒的形式加入
    AddTaskByJobWithSeconds(cronName string, spec string, job interface{ Run() }, taskName string, option ...cron.Option) (cron.EntryID, error)
    // 通过函数的方法添加任务
    AddTaskByFunc(cronName string, spec string, task func(), taskName string, option ...cron.Option) (cron.EntryID, error)
    // 通过接口的方法添加任务 要实现一个带有 Run方法的接口触发
    AddTaskByJob(cronName string, spec string, job interface{ Run() }, taskName string, option ...cron.Option) (cron.EntryID, error)
    // 获取对应taskName的cron 可能会为空
    FindCron(cronName string) (*taskManager, bool)
    // 指定cron开始执行
    StartCron(cronName string)
    // 指定cron停止执行
    StopCron(cronName string)
    // 查找指定cron下的指定task
    FindTask(cronName string, taskName string) (*task, bool)
    // 根据id删除指定cron下的指定task
    RemoveTask(cronName string, id int)
    // 根据taskName删除指定cron下的指定task
    RemoveTaskByName(cronName string, taskName string)
    // 清理掉指定cronName
    Clear(cronName string)
    // 停止所有的cron
    Close()
}

使用Demo

type Job struct{}

func (j *Job) Run() {
    fmt.Println("testFunc") // 每天打印一遍
}

func Demo() {
    // 在gva中 global.GVA_Timer 已经是初始化Timer对象供使用
    // 如果你想自己调用 utils.NewTimerTask() 即可拿到 Timer 接口
    // demo 演示
    t := utils.NewTimerTask()
    // spec 定时任务详细配置参考 https://pkg.go.dev/github.com/robfig/cron?utm_source=godoc
    // 同一个 taskName 中也可以设置多个任务
    id , err := t.AddTaskByFunc("testFunc", "@daily", func() {
        fmt.Println("testFunc") // 每天打印一遍
    })
    if err != nil {
        // ...
    }
    // job 实例
    id1 , err1 := t.AddTaskByJob("testFunc", "@daily", &Job{})
    if err1 != nil {
         // ...           
    } 

    // 使用 AddTaskByFunc AddTaskByJob 添加的任务默认是激活状态
    // 想要停止调用 StopTask 即可
    t.StopTask("testFunc")

    // 也可以调用 t.FindCron() 获取cron原生对象,调用它的更多方法

    // t.Remove() 删除任务
    t.Remove("testFunc",id)



    // t.Close() 释放资源
    t.Close()
}

项目内示例

文件路径gin-vue-admin/server/initialize/timer.go

package initialize

import (
    "fmt"
    "github.com/flipped-aurora/gin-vue-admin/server/task"

    "github.com/robfig/cron/v3"

    "github.com/flipped-aurora/gin-vue-admin/server/global"
)

func Timer() {
    go func() {
        var option []cron.Option
        option = append(option, cron.WithSeconds())
        // 清理DB定时任务
        _, err := global.GVA_Timer.AddTaskByFunc("ClearDB", "@daily", func() {
            err := task.ClearTable(global.GVA_DB) // 定时任务方法定在task文件包中
            if err != nil {
                fmt.Println("timer error:", err)
            }
        }, option...)
        if err != nil {
            fmt.Println("add timer error:", err)
        }

        // 其他定时任务定在这里 参考上方使用方法

        //_, err := global.GVA_Timer.AddTaskByFunc("定时任务标识", "corn表达式", func() {
        //    具体执行内容...
        //  ......
        //}, option...)
        //if err != nil {
        //    fmt.Println("add timer error:", err)
        //}
    }()
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文