在使用beego开发过程中,遇到一个需求就是,要定时检测数据库中的某个字段值,取出该值进行判断,如果符合判断规则就发送邮件。所以这时候就需要一个定时任务,在启动beego的时候就启动该定时任务。
首先安装cron: go get github.com/robfig/cron/v3@v3.0.0
第一步:新建 一个utils目录,在该目录下创建task.go文件。
创建该文件,是为了将定时任务执行的代码与controllers的代码分离开来,形成一个单独的文件
代码示例如下:
该代码片段的作用就是每个30s执行MonitorScanStatus方法
package utils
import "github.com/robfig/cron/v3"
func Init() {
crontab := cron.New(cron.WithSeconds())
ss := "*/30 * * * * ?"
_, err := crontab.AddFunc(ss, MonitorScanStatus)
if err != nil {
fmt.Printf("err: %v\n", err)
fmt.Println("初始化成功")
}
crontab.Start()
defer crontab.Stop()
select {}
}
func MonitorScanStatus(){
fmt.Println("定时执行的方法")
}
第二步:为了实现启动beego的时候就能直接执行该定时任务,所有我们还需要在main.go中,导入该文件,并执行Init()方法
package main
import "scanproject/utils"
func main() {
go utils.Init()
beego.Run()
}
在main.go中导入之前创建的utils目录,然后再main方法中执行 go utils.Init()语句,这样就能实现在启动beego的时候启动该定时任务。