golang基于时间任务调度的轻量级定时任务插件库gron的使用
Golang基于时间任务调度的轻量级定时任务插件库gron的使用
概述
Gron是一个提供清晰语法来编写和部署cron任务的Go库。它具有以下特点:
- 简洁的API用于调度任务
- 线程安全
- 可自定义的任务类型
- 可自定义的调度计划
安装
$ go get github.com/roylee0704/gron
基本用法
package main
import (
"fmt"
"time"
"github.com/roylee0704/gron"
)
func main() {
c := gron.New()
c.AddFunc(gron.Every(1*time.Hour), func() {
fmt.Println("runs every hour.")
})
c.Start()
}
调度参数
所有调度都使用机器的本地时区(由Go的time包提供)。
使用gron.Every()
设置基本周期性调度:
gron.Every(1*time.Second)
gron.Every(1*time.Minute)
gron.Every(1*time.Hour)
通过导入gron/xtime
还支持Day
和Week
:
import "github.com/roylee0704/gron/xtime"
gron.Every(1 * xtime.Day)
gron.Every(1 * xtime.Week)
使用.At(hh:mm)
在特定时间运行:
gron.Every(30 * xtime.Day).At("00:00")
gron.Every(1 * xtime.Week).At("23:59")
自定义任务类型
你可以通过实现gron.Job
接口(Run()
方法)来定义自定义任务类型。
例如:
type Reminder struct {
Msg string
}
func (r Reminder) Run() {
fmt.Println(r.Msg)
}
定义任务后,实例化它并在Gron中调度运行:
c := gron.New()
r := Reminder{ "Feed the baby!" }
c.Add(gron.Every(8*time.Hour), r)
c.Start()
自定义任务函数
你可以注册Funcs
在给定计划上执行。Gron将在自己的goroutines中异步运行它们。
c := gron.New()
c.AddFunc(gron.Every(1*time.Second), func() {
fmt.Println("runs every second")
})
c.Start()
自定义调度
Schedule是包装基本Next
方法的接口:Next(p time.Duration) time.Time
在gron
中,接口值Schedule
有以下具体类型:
- periodicSchedule:将时间实例t添加到基础周期p
- atSchedule:在每个周期p重新出现,在时间组件(hh:mm)
完整示例
package main
import (
"fmt"
"github.com/roylee0704/gron"
"github.com/roylee0704/gron/xtime"
)
type PrintJob struct{ Msg string }
func (p PrintJob) Run() {
fmt.Println(p.Msg)
}
func main() {
var (
// 调度计划
daily = gron.Every(1 * xtime.Day)
weekly = gron.Every(1 * xtime.Week)
monthly = gron.Every(30 * xtime.Day)
yearly = gron.Every(365 * xtime.Day)
// 自定义任务
purgeTask = func() { fmt.Println("purge aged records") }
printFoo = PrintJob{"Foo"}
printBar = PrintJob{"Bar"}
)
c := gron.New()
c.Add(daily.At("12:30"), printFoo)
c.AddFunc(weekly, func() { fmt.Println("Every week") })
c.Start()
// 任务也可以添加到正在运行的Gron中
c.Add(monthly, printBar)
c.AddFunc(yearly, purgeTask)
// 停止Gron(正在运行的任务不会停止)
c.Stop()
}
更多关于golang基于时间任务调度的轻量级定时任务插件库gron的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复