当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
- MySQL导入sql文件的三种方法
- 选择黑盒测试用例设计方法的综合策略方案总结
- golang's time package: methods for time interval formatting and output of timestamp formats such as seconds, milliseconds, and nanoseconds
- matlab simulink 模糊pid结合smith控制温度
- MySQL 用户授权
- 2022河南萌新联赛第(四)场:郑州轻工业大学 C - 最大公因数
- mysql练习题
- 11种你需要了解的物联网(IoT)协议
- navicat无法连接mysql超详细处理方法
- mysql 查询表 所有字段
猜你喜欢
H5接入支付流程-微信支付&支付宝支付
选择黑盒测试用例设计方法的综合策略方案总结
Android studio连接MySQL并完成简单的登录注册功能
MySQL 灵魂 16 问,你能撑到第几问?
navicat新建数据库
MySQL如何对SQL做prepare预处理(解决IN查询SQL预处理仅能查询出一条记录的问题)
apifox介绍及使用(1)。
Matlab paper illustration drawing template No. 41 - bubble chart (bubblechart)
The original question on the two sides of the automatic test of the byte beating (arranged according to the recording) is real and effective 26
MySql字符串拆分实现split功能(字段分割转列、转行)
随机推荐
【HCIE】NO.45 Hub and Spoke配置案例
[QNX Hypervisor 2.2用户手册]9.17 tolerance
MySQL大批量造数据
Google Chrome(谷歌浏览器)安装使用
ERROR 1045 (28000) Access denied for user 'root'@'localhost'Solution
编译失败:HBuilderX 安装目录不能包括 ( 等特殊字符 (HBuilderX,uni-app报错)
pg数据库报错问题,有懂的吗
18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家
Redis-集群模式(主从复制模式,哨兵模式,集群化模式)
ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法
RADIUS 如何提高 WiFi 无线网络安全性?
Mysql存储json格式数据
数据湖:流计算处理框架Flink概述
el-input can only input integers (including positive numbers, negative numbers, 0) or only integers (including positive numbers, negative numbers, 0) and decimals
interrupt()、interrupted()和isInterrupted()你真的懂了吗
ORA-04044:此处不允许过程、函数、程序包或类型,系统分析与解决
【语义分割】FCN
The original question on the two sides of the automatic test of the byte beating (arranged according to the recording) is real and effective 26
腾讯注册中心演进及性能优化实践
How much does a test environment cost? Start with cost and efficiency