当前位置:网站首页>Timing task library in the language use Cron, rounding
Timing task library in the language use Cron, rounding
2022-08-02 06:11:00 【m0_67400972】
原创不易,未经允许,请勿转载.
文章目录
快速入门
安装cron,注意这里安装的是v3版本.新版本和旧版时间使用有所区别
go get github.com/robfig/cron/[email protected]
在项目中导入
import "github.com/robfig/cron/v3"
v3版本的github.com/robfig/cron/v3默认解析器符合Cron 维基百科页面所描述的标准
用法大致如下
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New()
c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })
c.AddFunc("30 3-6,20-23 * * *", func() { fmt.Println(".. in the range 3-6am, 8-11pm") })
c.AddFunc("CRON_TZ=Asia/Tokyo 30 04 * * *", func() { fmt.Println("Runs at 04:30 Tokyo time every day") })
c.AddFunc("@hourly", func() { fmt.Println("Every hour, starting an hour from now") })
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty, starting an hour thirty from now") })
c.Start()
select {}
}
Cron表达式格式
一个 cron 表达式表示一组时间,使用 5 个空格分隔的字段.这是v3版本默认支持的格式.
Field name | Mandatory? | Allowed values | Allowed special characters
---------- | ---------- | -------------- | --------------------------
Minutes | Yes | 0-59 | * / , -
Hours | Yes | 0-23 | * / , -
Day of month | Yes | 1-31 | * / , - ?
Month | Yes | 1-12 or JAN-DEC | * / , -
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
如果要想在v3版本中也支持秒级别的解析,需要自定义解析器.代码如下
Field name | Mandatory? | Allowed values | Allowed special characters
---------- | ---------- | -------------- | --------------------------
Seconds | Yes | 0-59 | * / , -
Minutes | Yes | 0-59 | * / , -
Hours | Yes | 0-23 | * / , -
Day of month | Yes | 1-31 | * / , - ?
Month | Yes | 1-12 or JAN-DEC | * / , -
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
func main() {
// Seconds field, required
cron.New(cron.WithSeconds())
// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
}
预定义时间表
可以用@yearly、@monthly、@weekly、@weekly、@daily、@hourly来替代cron表达式.分别表示每年,每月、每星期、每天、每小时.
还可以用@every <duartion>来表示间隔时间,即间隔<duration>执行一次任务.<duration>只要可以被time.ParseDuration()解析即可
设置时区
func main() {
cron.New(
cron.WithLocation(time.UTC))
}
常用的方法介绍
New()
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
// 创建一个默认的cron对象
c := cron.New()
// 自定义解析器
cron.New(cron.WithSeconds())
// Seconds field, optional
cron.New(cron.WithParser(cron.NewParser(
cron.SecondOptional | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor,
)))
select {}
}
AddJob()
// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个Job
func (c *Cron) AddJob(spec string, cmd Job) (EntryID, error)
// Job是一个接口,有一个Run方法
type Job interface {
Run()
}
自定义个一个func类型,实现Run方法.不过一般可以直接用下面讲的AddFunc方法即可
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
type MyJob func()
func (f MyJob) Run() {
fmt.Println("myJob")
}
func main() {
c := cron.New()
c.AddJob("@every 1s", MyJob(func() {
fmt.Println("myjob")
}))
c.Start()
select {}
}
AddFunc()
// 有两个参数,第一个参数可以是cron表达式或者预定义时间表,第二个传入一个函数,就是要执行的任务
// 会返回一个Id和error
// 会把传入的cmd func转成FuncJob.FuncJob实现了Job接口
func (c *Cron) AddFunc(spec string, cmd func()) (EntryID, error) {
return c.AddJob(spec, FuncJob(cmd))
}
package main
import (
"fmt"
"github.com/robfig/cron/v3"
)
func main() {
c := cron.New()
Id, err := c.AddFunc("30 * * * *", func() { fmt.Println("Every hour on the half hour") })
// Id可以用做取消任务
c.Remove(Id)
select {}
}
Start()
调用start方法开始执行任务
func main() {
c := cron.New()
c.AddJob("@every 1s", MyJob(func() {
fmt.Println("myjob")
}))
c.AddFunc()
c.Start()
select {}
}
如果这篇文章对您有所帮助,麻烦点个一键三连.
原创不易,未经允许,请勿转载.
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在.深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小.自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前.因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
- 【热题】LeetCode 热题 HOT 100分类+题解
- 12 reasons for MySQL slow query
- RADIUS 如何提高 WiFi 无线网络安全性?
- MySQL导入sql文件的三种方法
- MySQL(7)
- MySql字符串拆分实现split功能(字段分割转列、转行)
- ApiPost 真香真强大,是时候丢掉 Postman、Swagger 了
- 2022年100道最新软件测试面试题,常见面试题及答案汇总
- MySQL String Concatenation - Various String Concatenation Practical Cases
- [PSQL] 函数、谓词、CASE表达式、集合运算
猜你喜欢

ApiPost 真香真强大,是时候丢掉 Postman、Swagger 了

navicat connects to MySQL and reports an error: 1045 - Access denied for user 'root'@'localhost' (using password YES)

Towhee 每周模型

系统(层次)聚类

力扣 2127. 参加会议的最多员工数 拓扑剪枝与2360补充

12个MySQL慢查询的原因分析

Google notes cut hidden plug-in installation impression

简道云-灵活易用的应用搭建平台

100 latest software testing interview questions in 2022, summary of common interview questions and answers

Navicat cannot connect to mysql super detailed processing method
随机推荐
navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
matlab simulink 模糊pid结合smith控制温度
12 reasons for MySQL slow query
12个MySQL慢查询的原因分析
本周大新闻|苹果MR已进行Pre-EVT测试,Quest 2涨价100美元
MySql将一张表的数据copy到另一张表中
ORA-04044:此处不允许过程、函数、程序包或类型,系统分析与解决
MySQL 多表关联一对多查询实现取最新一条数据
mysql实现按照自定义(指定顺序)排序
mysql 8.0.28版本安装配置方法图文教程
去字节跳动自动化测试二面原题(根据录音整理)真实有效 26
MySQL 8.0.29 解压版安装教程(亲测有效)
面试测试工程师一般会问什么?测试主管告诉你
mysql 存储过程详解
navicat新建数据库
MySQL 5.7详细下载安装配置教程
MySQL夺命10问,你能坚持到第几问?
Mysql return table
Redis-集群模式(主从复制模式,哨兵模式,集群化模式)
07-传统的生产者消费者问题、防止虚假唤醒