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

曾经终败给现在 2022-09-16 08:50 331阅读 0赞

第三方库

cronexpr的github地址

代码演示

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gorhill/cronexpr"
  5. "time"
  6. )
  7. /**
  8. * @author micro.cloud.fly
  9. * @date 2021/10/15 5:57 下午
  10. * @desc 演示调度协程
  11. */
  12. type Job struct {
  13. conExpre *cronexpr.Expression
  14. nextTime time.Time
  15. }
  16. func main() {
  17. //定义两个Job
  18. con1 := cronexpr.MustParse("*/3 * * * * * *")
  19. now := time.Now()
  20. job1 := Job{
  21. conExpre: con1,
  22. nextTime: con1.Next(now),
  23. }
  24. con2 := cronexpr.MustParse("*/5 * * * * * *")
  25. job2 := Job{
  26. conExpre: con2,
  27. nextTime: con1.Next(now),
  28. }
  29. //定义一个map,用来存储这两个job
  30. m := make(map[string]*Job)
  31. m["job1"] = &job1
  32. m["job2"] = &job2
  33. //拉起一个协程,监控这两个任务
  34. go func() {
  35. for {
  36. curr := time.Now()
  37. for jobName, job := range m {
  38. if job.nextTime.Before(curr) || job.nextTime.Equal(curr) {
  39. //注意这里需要将变量复制过去,传到这个方法中
  40. go func(jobname string) {
  41. fmt.Println(curr, " 执行任务:", jobname)
  42. }(jobName)
  43. //重置下次执行时间
  44. job.nextTime = job.conExpre.Next(curr)
  45. fmt.Println(jobName, "下次执行时间为:", job.nextTime)
  46. }
  47. }
  48. time.Sleep(100 * time.Millisecond)
  49. }
  50. }()
  51. time.Sleep(20 * time.Second)
  52. }

执行输出

  1. job1 下次执行时间为: 2021-10-15 18:07:51 +0800 CST
  2. job2 下次执行时间为: 2021-10-15 18:07:50 +0800 CST
  3. 2021-10-15 18:07:48.015409 +0800 CST m=+1.232900015 执行任务: job1
  4. 2021-10-15 18:07:48.015409 +0800 CST m=+1.232900015 执行任务: job2
  5. job2 下次执行时间为: 2021-10-15 18:07:55 +0800 CST
  6. 2021-10-15 18:07:50.061674 +0800 CST m=+3.279103272 执行任务: job2
  7. job1 下次执行时间为: 2021-10-15 18:07:54 +0800 CST
  8. 2021-10-15 18:07:51.09857 +0800 CST m=+4.315968560 执行任务: job1
  9. job1 下次执行时间为: 2021-10-15 18:07:57 +0800 CST
  10. 2021-10-15 18:07:54.08335 +0800 CST m=+7.300659041 执行任务: job1
  11. job2 下次执行时间为: 2021-10-15 18:08:00 +0800 CST
  12. 2021-10-15 18:07:55.009302 +0800 CST m=+8.226583525 执行任务: job2
  13. job1 下次执行时间为: 2021-10-15 18:08:00 +0800 CST
  14. 2021-10-15 18:07:57.049528 +0800 CST m=+10.266748115 执行任务: job1
  15. job1 下次执行时间为: 2021-10-15 18:08:03 +0800 CST
  16. job2 下次执行时间为: 2021-10-15 18:08:05 +0800 CST
  17. 2021-10-15 18:08:00.01745 +0800 CST m=+13.234580215 执行任务: job1
  18. 2021-10-15 18:08:00.01745 +0800 CST m=+13.234580215 执行任务: job2
  19. job1 下次执行时间为: 2021-10-15 18:08:06 +0800 CST
  20. 2021-10-15 18:08:03.075889 +0800 CST m=+16.292927628 执行任务: job1
  21. job2 下次执行时间为: 2021-10-15 18:08:10 +0800 CST
  22. 2021-10-15 18:08:05.017993 +0800 CST m=+18.234974031 执行任务: job2
  23. job1 下次执行时间为: 2021-10-15 18:08:09 +0800 CST
  24. 2021-10-15 18:08:06.038355 +0800 CST m=+19.255304875 执行任务: job1

发表评论

表情:
评论列表 (有 0 条评论,331人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Vue 使用

    1. 前言 本小节我们将带大家学习如何在项目中使用第三方库。在日常的开发中,我们正在大量的使用第三方库。学会使用第三方库可以说是前端工程师最基本的技能。其实,使用第三方库