当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
- 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
- Navicat报错:1045 -拒绝访问用户[email protected](使用passwordYES)
- el-input can only input integers (including positive numbers, negative numbers, 0) or only integers (including positive numbers, negative numbers, 0) and decimals
- Android Studio 实现登录注册-源代码 (连接MySql数据库)
- MySQL 8.0.29 设置和修改默认密码
- 【HCIE】NO.30 OSPFv3的基本配置
- 2022年7月学习计划完成情况
- Jmeter使用多线程测试web接口
- 腾讯注册中心演进及性能优化实践
- LeetCode刷题系列 -- 10. 正则表达式匹配
猜你喜欢
MySQL multi-table association one-to-many query to get the latest data
【MLT】MLT多媒体框架生产消费架构解析(一)
ApiPost is really fragrant and powerful, it's time to throw away Postman and Swagger
swinIR论文阅读笔记
去字节跳动自动化测试二面原题(根据录音整理)真实有效 26
How much does a test environment cost? Start with cost and efficiency
navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
Browser onload event
选择黑盒测试用例设计方法的综合策略方案总结
【HCIE】NO.45 Hub and Spoke配置案例
随机推荐
Matlab论文插图绘制模板第41期—气泡图(bubblechart)
LeetCode刷题系列 -- 10. 正则表达式匹配
MP更新操作方式
Detailed explanation of AMQP protocol
Grid布局介绍
18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家
一线大厂软件测试流程(思维导图)详解
AMQP协议详解
navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
12个MySQL慢查询的原因分析
【语义分割】FCN
Go语言之interface详解
[QNX Hypervisor 2.2用户手册]9.17 tolerance
mysql练习题
Matlab paper illustration drawing template No. 41 - bubble chart (bubblechart)
MobaXsterm如何使用
How Navicat Connects to MySQL
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
IOT物联网概述及应用层架构入门篇
JDBC revisited