Golang定时任务调度

废话不多,直接看代码:

package main

import (
	"fmt"
	"time"

	"github.com/robfig/cron/v3"
	"go.uber.org/zap"
)

var (
	c         *cron.Cron
	logger, _ = zap.NewProduction()
)

func Log() *zap.Logger {
	return logger
}

type SchedulerTask struct {
	Name     string
	Cron     string
	FuncName string
	FuncArgs []string
}

func (task SchedulerTask) Run() {
	Log().Info("调度任务常规信息", zap.String("task", task.Name))
	Log().Debug("调度任务调试信息", zap.String("task", task.Name))
	Log().Error("调度任务示例错误信息", zap.String("task", task.Name))
	Log().Warn("调度任务示例警告信息", zap.String("task", task.Name))
	panic("调度任务示例恐慌信息")
}

type CronLogger struct{}

func (cl CronLogger) Info(msg string, keysAndValues ...interface{}) {
	Log().Info("任务调度器INFO日志", zap.String("msg", msg), zap.Any("keysAndValues", keysAndValues))
}

func (cl CronLogger) Error(err error, msg string, keysAndValues ...interface{}) {
	Log().Error("任务调度器ERROR日志", zap.String("msg", msg), zap.Error(err), zap.Any("keysAndValues", keysAndValues))
}

func main() {
	cl := CronLogger{}
	c = cron.New(cron.WithLogger(cl), cron.WithChain(cron.SkipIfStillRunning(cl), cron.Recover(cl)))
	st := SchedulerTask{
		Name:     "task1",
		Cron:     "0/1 * * * *",
		FuncName: "demo1",
		FuncArgs: nil,
	}
	c.AddJob(st.Cron, st)
	c.Start()

	time.Sleep(3 * time.Minute)
	fmt.Println("done")
	return
}

非常简单,亲测通过,如果要在自己的项目中使用,把main函数之外的东西放在一个全局公共的包中,初始化一下,然后再在业务函数中把main函数中的代码执行一遍,就搞定了。

非常简单有木有!!!

你可能感兴趣的:(golang,开发语言,后端)