go corn定时任务简单应用

本文介绍了如何在Go中使用github.com/robfig/cron库来创建定时任务。通过示例代码展示了如何设置cron表达式,例如每分钟执行一次任务。还提到了cron表达式的各种匹配符号,如星号、斜线、逗号和连字号,以及预定义的模式,如@every1h用于每小时执行一次。
摘要由CSDN通过智能技术生成

在写一些服务的时候,我们可能会需要定时执行一些方法,这时候就需要用到定时任务了;所以最近学了学corn,使用方法还是很容易的

导包

go get -v -u github.com/robfig/cron #第三方拉取

简单例子

package main

import (
	"fmt"
	"github.com/robfig/cron"
	"log"
)

func main() {
	log.Println("starting...")

	c := cron.New()

	if err := c.AddFunc("*/1 * * * * *", example); err != nil {
		fmt.Println(err)
	}
	c.Start()
	select { //查询语句,保持程序运行,在这里等同于for{}
	}
}

func example() {
	log.Println("Hello World!")
}

AddFunc后的符号

//* * * * * *
// 第一个 second (0 - 60)
// 第二个 min (0 - 59)
// 第三个 hour (0 - 23)
// 第四个 day of month (1 - 31)
// 第五个 month (1 - 12)
// 第六个 day of week (0 - 6) (0 to 6 are Sunday to Saturday)

匹配符号

//星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月
//斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 这些时间点执行),这里也可以表示为:3/15
//逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行
//连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)
//问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *

github.com/robfig/cron 包还给我门提供了一些预定义的模式:

入口描述等价于
@yearly (or @annually)每年一次,一月一日午夜0 0 0 1 1 *
@monthly每月运行一次,每月第一天午夜0 0 0 1 * *
@weekly每周运行一次,周六/周日午夜0 0 0 * * 0
@daily (or @midnight)每天运行一次,当天午夜0 0 0 * * *
@hourly每小时的开始运行一次0 0 * * * *
@every 每个持续的时间

例子

c.AddFunc("@every 1h", func() { })
在Java中,我们可以使用Quartz框架来实现数据驱动的cron表达式,并配置定时任务。Quartz是一个开源的任务调度框架,它允许你在Java应用中方便地安排和管理定期执行的工作。 以下是基本步骤: 1. **添加依赖**:首先,在你的项目中引入Quartz和Spring的依赖,如果使用Spring Boot,可以在pom.xml文件中添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. **配置启动类**:在Spring Boot的启动类中,启用Quartz集成: ```java @SpringBootApplication @EnableScheduling // 开启Spring的调度功能 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. **编写Job和Trigger**:你需要创建一个实现了`org.quartz.Job`接口的类,代表你要执行的具体任务。然后,创建一个`org.quartz.Trigger`实例,其中包含cron表达式,如 `@Scheduled(cron = "0 0/5 * * * ?")` 表示每五分钟执行一次。 4. **数据绑定**:你可以将cron表达式存储在一个配置文件(如application.properties或application.yml)里,或者数据库表中,使用Spring的`@Value`注解从外部获取表达式。例如: ```properties # application.properties quartz.cron.expression=mydataDrivenCronExpression ``` 然后在配置类中读取并注入到触发器中: ```java @Configuration public class QuartzConfig { @Autowired private Environment env; @Bean(destroyMethod = "stop") public SimpleScheduleBuilder simpleSchedule() { return SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(5 * 60 * 1000) // 每5分钟执行 .repeatForever(); // 无限循环 } @Bean public Trigger myTrigger() { String cronExp = env.getProperty("quartz.cron.expression"); CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger() .withIdentity("myTrigger", "defaultGroup") .usingJobData("cronExpression", cronExp) .forJob(myJob()) .build(); return trigger; } @Bean(name = "myJob") public MyJob myJob() { return new MyJob(); } } ``` 5. **执行任务**:`MyJob`类需要实现`Job`接口,并覆盖`execute()`方法,这里就是实际执行的任务代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值