網站首頁 編程語言 正文
一、簡介:
1、cron包
cron包:"github.com/robfig/cron/v3"
文檔:cron package - github.com/robfig/cron - Go Packages
2、表達式,go cron使用的和 Linux crontab 一樣的表達式
# 文件格式說明
# ┌──分鐘(0 - 59)
# │ ?┌──小時(0 - 23)
# │ ?│ ?┌──日(1 - 31)
# │ ?│ ?│ ?┌─月(1 - 12)
# │ ?│ ?│ ?│ ?┌─星期(0 - 6,表示從周日到周六)
# │ ?│ ?│ ?│ ?│
# * ?* ?* ?* ?* 被執行的命令
?
3、新老版本區別
老版本的最大區別在于如果需要秒級定義,需要額外傳入參數,并且可以自由配置參數
c := cron.New(cron.WithSeconds()) // 秒級操作cron.WithSeconds()
?代碼示例
package main import ( "fmt" "github.com/robfig/cron/v3" "log" "os" ) func RunCron() { c := cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)), cron.WithLogger( cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags)))) i := 1 EntryID, err := c.AddFunc("*/5 * * * * *", func() { fmt.Println(time.Now(), "每5s一次----------------", i) time.Sleep(time.Second *6) i++ }) fmt.Println(time.Now(), EntryID, err) c.Start() select() } func main() { RunCron() }
多任務 AddJob
package main import ( "fmt" "github.com/robfig/cron/v3" ) type Job1 struct { } func (t Job1) Run() { fmt.Println(time.Now(), "I'm Job1") } type Job2 struct { } func (t Job2) Run() { fmt.Println(time.Now(), "I'm Job2") } func RunCron() { c := cron.New(cron.WithSeconds()) EntryID, err := c.AddJob("*/5 * * * * *", Job1{}) fmt.Println(time.Now(), EntryID, err) EntryID, err = c.AddJob("*/10 * * * * *", Job2{}) fmt.Println(time.Now(), EntryID, err) c.Start() select() } func main() { RunCron() }
二、項目實操
數據統計系統 statsys 每天凌晨定時統計前一天運營數據
1、啟動daemon 守護進程
package main import ( "github.com/robfig/cron/v3" logger "github.com/sirupsen/logrus" "statsys/scheduler/crob_job" // 這里引入你的任務 ) func printLog(crobJob string, err error) { if err != nil { logger.Errorf("Start %s Error, err: %v", crobJob, err) } else { logger.Infof("Start %s Successful!", crobJob) } } func RunCron() { c := cron.New() // 收入數據統計 定時任務(每天凌晨00:01:00)執行 _, err := c.AddJob("1 0 * * *", &crob_job.DeliveryIncomeStatJob) printLog("IncomeStatJob", err) // 支出數據統計 定時任務(每天凌晨00:03:00)執行 _, err = c.AddJob("3 0 * * *", &crob_job.PaymentStatJob) printLog("PaymentStatJob", err) // 啟動一個新的 goroutine 做循環檢測 c.Start() select {} } func main() { RunCron() }
2、統計任務
// 支出數據統計定時任務 package crob_job type paymentStatJob struct { amountStatDataBase *amount_stat.AmountDataBase } // 單利 var ( PaymentStatJob = paymentStatJob{} ) func (this *paymentStatJob) Run() { logger.Warningln(">>>>>>>>>>>>> Start paymentStat") startTime := "2022-01-02" endTime := "2022-01-01" // 查詢統計數據 dataList, code := brawn.StationAccountSrv.GetPaymentDate(startTime, endTime) if code != ecode.SUCC { logger.Errorf("支出數據統計定時任務 errCode: %v", code) return } if len(dataList) <= 0 { logger.Warningln(" >>>>>>>> 暫無 支出數據 <<<<<<<<") return } // 保存支付統計數據 this.amountStatDao.SavePaymentStatData(dataList...) logger.Warningln("<<<<<<<<<<<<< End paymentStat") }
... 具體你的項目多個任務
執行結果
總結
原文鏈接:https://blog.csdn.net/LoganPython/article/details/125777340
相關推薦
- 2022-07-10 Popconfirm氣泡確認框無法觸發confirm函數
- 2022-12-24 淺析如何截獲C#程序產生的日志_C#教程
- 2022-09-27 Swift超詳細講解指針_Swift
- 2022-09-16 Python?docx庫刪除復制paragraph及行高設置圖片插入示例_python
- 2022-09-25 如何查看Redis的host和port
- 2022-10-07 Python處理EXCEL表格導入操作分步講解_python
- 2022-02-27 Web server failed to start. Port 8989 was already
- 2022-05-01 使用SQL實現車流量的計算的示例代碼_MsSql
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支