废话不多,直接看代码:
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函数中的代码执行一遍,就搞定了。
非常简单有木有!!!