go使用第三方库解析cron表达式

第三方库

cronexpr的github地址

代码演示

package main

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

/**
 * @author micro.cloud.fly
 * @date 2021/10/15 5:57 下午
 * @desc 演示调度协程
 */

type Job struct {
	conExpre *cronexpr.Expression
	nextTime time.Time
}

func main() {

	//定义两个Job
	con1 := cronexpr.MustParse("*/3 * * * * * *")
	now := time.Now()
	job1 := Job{
		conExpre: con1,
		nextTime: con1.Next(now),
	}
	con2 := cronexpr.MustParse("*/5 * * * * * *")

	job2 := Job{
		conExpre: con2,
		nextTime: con1.Next(now),
	}

	//定义一个map,用来存储这两个job
	m := make(map[string]*Job)
	m["job1"] = &job1
	m["job2"] = &job2

	//拉起一个协程,监控这两个任务
	go func() {
		for {

			curr := time.Now()
			for jobName, job := range m {
				if job.nextTime.Before(curr) || job.nextTime.Equal(curr) {
					//注意这里需要将变量复制过去,传到这个方法中
					go func(jobname string) {
						fmt.Println(curr, " 执行任务:", jobname)
					}(jobName)
					//重置下次执行时间
					job.nextTime = job.conExpre.Next(curr)
					fmt.Println(jobName, "下次执行时间为:", job.nextTime)
				}
			}
			time.Sleep(100 * time.Millisecond)
		}

	}()

	time.Sleep(20 * time.Second)
}

执行输出

job1 下次执行时间为: 2021-10-15 18:07:51 +0800 CST
job2 下次执行时间为: 2021-10-15 18:07:50 +0800 CST
2021-10-15 18:07:48.015409 +0800 CST m=+1.232900015  执行任务: job1
2021-10-15 18:07:48.015409 +0800 CST m=+1.232900015  执行任务: job2
job2 下次执行时间为: 2021-10-15 18:07:55 +0800 CST
2021-10-15 18:07:50.061674 +0800 CST m=+3.279103272  执行任务: job2
job1 下次执行时间为: 2021-10-15 18:07:54 +0800 CST
2021-10-15 18:07:51.09857 +0800 CST m=+4.315968560  执行任务: job1
job1 下次执行时间为: 2021-10-15 18:07:57 +0800 CST
2021-10-15 18:07:54.08335 +0800 CST m=+7.300659041  执行任务: job1
job2 下次执行时间为: 2021-10-15 18:08:00 +0800 CST
2021-10-15 18:07:55.009302 +0800 CST m=+8.226583525  执行任务: job2
job1 下次执行时间为: 2021-10-15 18:08:00 +0800 CST
2021-10-15 18:07:57.049528 +0800 CST m=+10.266748115  执行任务: job1
job1 下次执行时间为: 2021-10-15 18:08:03 +0800 CST
job2 下次执行时间为: 2021-10-15 18:08:05 +0800 CST
2021-10-15 18:08:00.01745 +0800 CST m=+13.234580215  执行任务: job1
2021-10-15 18:08:00.01745 +0800 CST m=+13.234580215  执行任务: job2
job1 下次执行时间为: 2021-10-15 18:08:06 +0800 CST
2021-10-15 18:08:03.075889 +0800 CST m=+16.292927628  执行任务: job1
job2 下次执行时间为: 2021-10-15 18:08:10 +0800 CST
2021-10-15 18:08:05.017993 +0800 CST m=+18.234974031  执行任务: job2
job1 下次执行时间为: 2021-10-15 18:08:09 +0800 CST
2021-10-15 18:08:06.038355 +0800 CST m=+19.255304875  执行任务: job1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值