一个thinkphp搭建的微网站,网址导航网址大全,浏览器网页版入口,来(返)苏州人员信息登记平台文章目录 Robfig Cron介绍1. **安装 robfig/cron**2. **基本用法**示例#xff1a;创建一个简单的定时任务3. **Cron 表达式**常用的 Cron 表达式示例#xff1a;4. **添加和管理任务**5. **上下文支持**6. **使用场景**7. **高级用法**总结 Cron 在Gin中实践使用1. **安装 r… 文章目录 Robfig Cron介绍1. **安装 robfig/cron**2. **基本用法**示例创建一个简单的定时任务3. **Cron 表达式**常用的 Cron 表达式示例4. **添加和管理任务**5. **上下文支持**6. **使用场景**7. **高级用法**总结 Cron 在Gin中实践使用1. **安装 robfig/cron**2. **封装定时任务**cronjob.go - 封装定时任务3. **在 Gin 项目中使用定时任务**main.go - 在 Gin 中使用封装的定时任务4. **代码说明**5. **运行项目** Robfig Cron介绍
robfig/cron 是 Go 中一个常用的定时任务库提供了类似于 Unix cron 表达式的调度功能。可以使用它来执行定时任务例如每天备份数据库、定期发送报告等。以下是对 robfig/cron 的学习和常见使用场景。
1. 安装 robfig/cron
首先确保在项目中安装了 robfig/cron
go get github.com/robfig/cron/v32. 基本用法
使用 robfig/cron 来创建和管理定时任务非常简单。下面是一些基本的使用步骤和示例代码
示例创建一个简单的定时任务
package mainimport (fmttimegithub.com/robfig/cron/v3
)func main() {// 创建一个新的 Cron 调度器c : cron.New()// 添加一个定时任务每秒执行一次c.AddFunc(* * * * * *, func() {fmt.Println(Task running at, time.Now())})// 启动调度器c.Start()// 让主程序运行等待定时任务执行select {} // 阻塞主 goroutine
}在这个示例中AddFunc 方法将一个匿名函数添加到调度器中该函数将在每秒钟运行一次。cron.New() 创建一个新的调度器实例c.Start() 启动它。
3. Cron 表达式
robfig/cron 使用一种类 Unix 的 cron 表达式来定义任务的调度时间。标准格式为
秒 分 时 日 月 星期秒 (0-59)分 (0-59)时 (0-23)日 (1-31)月 (1-12)星期 (0-6) (星期天0)
常用的 Cron 表达式示例
0 * * * * *每分钟的第 0 秒执行0 30 * * * *每小时的第 30 分钟执行0 0 12 * * *每天中午 12:00 执行0 0 0 * * *每天午夜执行0 0 0 1 * *每月 1 号午夜执行
4. 添加和管理任务
你可以使用 AddFunc 添加任务也可以使用 AddJob 来添加实现了 cron.Job 接口的任务
package mainimport (fmttimegithub.com/robfig/cron/v3
)// 自定义任务必须实现 cron.Job 接口
type MyJob struct{}func (m MyJob) Run() {fmt.Println(Custom job running at, time.Now())
}func main() {c : cron.New()// 添加一个自定义任务c.AddJob(every 1s, MyJob{})// 启动调度器c.Start()select {} // 阻塞主 goroutine
}5. 上下文支持
robfig/cron/v3 支持任务执行的上下文例如取消任务、超时等。以下示例展示了如何在任务中使用上下文
package mainimport (contextfmttimegithub.com/robfig/cron/v3
)func main() {c : cron.New()c.AddFunc(*/5 * * * * *, func() {ctx, cancel : context.WithTimeout(context.Background(), 2*time.Second)defer cancel()select {case -time.After(1 * time.Second):fmt.Println(Task completed at, time.Now())case -ctx.Done():fmt.Println(Task timed out)}})c.Start()select {}
}6. 使用场景
定时任务执行可以用于执行各种周期性任务比如每小时执行数据同步、每天发送报告等。定期清理自动清理临时文件、日志或缓存。定时备份每天或每周定时备份数据库或文件。调度系统构建任务调度系统定期运行一组任务。批处理任务定期处理一批任务如批量发送电子邮件。
7. 高级用法
任务移除可以使用返回的 EntryID 移除任务。任务列表可以使用 Entries() 方法获取当前的任务列表。停止调度器使用 c.Stop() 停止调度器。
总结
robfig/cron 是一个功能强大的定时任务库具有简单易用的 API 和灵活的调度表达式。它适用于各种需要定期执行任务的场景例如数据同步、定时备份和批处理任务等。
Cron 在Gin中实践使用
要将 robfig/cron 的定时任务封装到一个单独的文件中并在 Gin 项目中使用可以按照以下步骤进行
1. 安装 robfig/cron
首先确保安装了 robfig/cron
go get github.com/robfig/cron/v32. 封装定时任务
创建一个单独的文件例如 cronjob.go用于封装定时任务的逻辑。
cronjob.go - 封装定时任务
package cronjobimport (fmttimegithub.com/robfig/cron/v3
)// CronJobManager 用于管理 cron 实例
type CronJobManager struct {cron *cron.Cron
}// NewCronJobManager 创建并返回一个新的 CronJobManager
func NewCronJobManager() *CronJobManager {return CronJobManager{cron: cron.New(),}
}// Start 开始执行定时任务
func (m *CronJobManager) Start() {m.cron.Start()
}// Stop 停止执行定时任务
func (m *CronJobManager) Stop() {m.cron.Stop()
}// AddTask 添加一个新的定时任务
func (m *CronJobManager) AddTask(schedule string, task func()) (cron.EntryID, error) {return m.cron.AddFunc(schedule, task)
}// ExampleTask 示例任务
func ExampleTask() {fmt.Println(Task running at, time.Now())
}在这个封装中我们定义了 CronJobManager用于管理 cron 实例包括添加任务、启动和停止任务。AddTask 方法用于添加定时任务。
3. 在 Gin 项目中使用定时任务
在 Gin 项目的入口文件通常是 main.go中引入并使用刚才封装的定时任务。
main.go - 在 Gin 中使用封装的定时任务
package mainimport (github.com/gin-gonic/ginyour_project/cronjob // 替换为你项目中 cronjob.go 的路径
)func main() {// 创建一个新的 Gin 路由器r : gin.Default()// 创建 CronJobManager 实例cronManager : cronjob.NewCronJobManager()// 添加定时任务例如每 5 秒执行一次_, err : cronManager.AddTask(every 5s, cronjob.ExampleTask)if err ! nil {panic(err)}// 启动定时任务cronManager.Start()defer cronManager.Stop() // 确保程序结束时停止定时任务// 定义路由r.GET(/ping, func(c *gin.Context) {c.JSON(200, gin.H{message: pong,})})// 启动 Gin 服务器r.Run(:8080)
}4. 代码说明 cronjob.go: 封装了 CronJobManager用于管理定时任务。提供了 NewCronJobManager、Start、Stop 和 AddTask 方法方便在其他地方使用。ExampleTask 是一个示例任务函数用于打印当前时间。 main.go: 创建了 CronJobManager 的实例并添加了一个每 5 秒执行一次的定时任务。使用 cronManager.Start() 启动定时任务。在 Gin 路由器上定义了一个简单的 /ping 路由用于测试。使用 defer 确保程序退出时停止所有定时任务。
5. 运行项目
运行项目控制台会每 5 秒输出一次 ExampleTask 中的日志例如
Task running at 2024-09-19 12:34:56
Task running at 2024-09-19 12:35:01访问 http://localhost:8080/ping会看到
{message: pong
}通过这种方式你可以在 Gin 项目中封装并使用 robfig/cron 的定时任务使其更加模块化和易于维护。