go 调用cronexpr创建定时任务

package main

import (
	"fmt"
	"github.com/gorhill/cronexpr"
	"time"
)

//创建任务结构体
type CronJob struct {
	Expression *cronexpr.Expression
	NextTime time.Time
}


func main()  {
	var(
		err error
		expr, expression *cronexpr.Expression
		now, nextTime time.Time
		cronJob *CronJob
		scheduleTable map[string]*CronJob
		jobName string

	)

	//构造Expression
	expression = cronexpr.MustParse("*/5 * * * * * *") //每5s执行1次
	now = time.Now()
	//获取下次任务执行的时间
	nextTime = expression.Next(now)
	fmt.Println(now, nextTime)

	cronJob = &CronJob{Expression:expression, NextTime:nextTime}
	//初始化map
	scheduleTable = make(map[string]*CronJob)
	//添加任务
	scheduleTable["job1"] = cronJob
	//解析Expression表达式
	if expr, err = cronexpr.Parse("*/3 * * * * * *"); err != nil{
		return
	}
	//添加任务
	scheduleTable["job2"] = &CronJob{Expression:expr, NextTime:expr.Next(now)}

	for{
		now = time.Now()
		for jobName, cronJob = range scheduleTable{
			//判断任务是否超时或和当前时间相同
			if cronJob.NextTime.Before(now) || cronJob.NextTime.Equal(now){
				//调用协程去执行任务
				go func(k string) {
					fmt.Println("超时了,执行任务", k)
				}(jobName)
			}
			//更新任务的下次执行时间
			cronJob.NextTime = cronJob.Expression.Next(now)
		}
	}


}复制代码


转载于:https://juejin.im/post/5d020305e51d4556dc293619

猜你喜欢

转载自blog.csdn.net/weixin_33932129/article/details/93171390