当前位置: 首页 > 文档资料 > Blade 中文文档 >

定时任务

优质
小牛编辑
135浏览
2023-12-01

在 Blade 2.0.8 版本之后加入了 cron 表达式来完成定时执行任务的需求。 你只需要在处理任务的方法上添加一个 @Schedule 注解,然后编写 cron 表达式即可。

Blade 的任务系统提供你创建、停止、获取任务列表的 API。

创建一个任务

@Bean
public class SimpleTask {

   @Schedule(cron = "* * * * * ?")
    public void syncRelate() {
        System.out.println("执行一次");
    }

}

这样就可以创建一个每秒钟执行一次的定时任务了。此时创建的定时任务名称是 task-0, 当你没有指定一个任务名称的时候,系统会按照数字顺序从 0 开始为他们命名,如果你想动态的 关闭他们,一定要在 @Schedule 注解上加入 name 来命名它,像这样。

@Bean
public class SimpleTask {

   @Schedule(name = "task1", cron = "* * * * * ?")
    public void syncRelate() {
        System.out.println("执行一次");
    }

}

TaskManager

可以通过调用 TaskManager 的静态方法来管理任务,下面是 TaskManager 的API。

  • getTask(name):根据任务名获取一个任务。
  • getTasks():获取系统所有任务
  • stopTask(name):根据任务名停止一个正在运行的任务

关闭任务的方法是在 Task 内部实现的,每一个任务都会有一个上下文,在前面的创建任务中你看到 每个方法都是没有参数的,Blade 支持你传入一个 TaskContext 类型的参数来操作当前的任务 (可能大多数情况用不到)。

private AtomicInteger run1 = new AtomicInteger();

@Schedule(cron = "* * * * * ?")
public void run1(TaskContext context) {
    if (run1.get() == 5) {
        context.stop();
        return;
    }
    run1.getAndIncrement();
    log.info(LocalDateTime.now() + ": Hello task1. " + Thread.currentThread());
}

像这样可以在某个条件触发的时候关闭一个任务。

常用的 Cron 表达式

  • */5 * * * * ?: 每隔5秒执行一次
  • 0 */1 * * * ?: 每隔1分钟执行一次
  • 0 0/5 * * * ?: 每隔5分钟执行一次
  • 0 0 23 * * ?: 每天23点执行一次
  • 0 0 1 * * ?: 每天凌晨1点执行一次
  • 0 0 1 1 * ?: 每月1号凌晨1点执行一次
  • 0 0 23 L * ?: 每月最后一天23点执行一次
  • 0 0 1 ? * L: 每周星期天凌晨1点实行一次
  • 0 26,29,33 * * * ?: 在26分、29分、33分执行一次
  • 0 0 0,13,18,21 * * ?: 每天的0点、13点、18点、21点都执行一次
  • 0 0 12 * * ?: 每天中午12点触发
  • 0 15 10 ? * *: 每天上午10:15触发
  • 0 15 10 * * ?: 每天上午10:15触发
  • 0 15 10 * * ? *: 每天上午10:15触发
  • 0 15 10 * * ? 2005: 2005年的每天上午10:15触发
  • 0 * 14 * * ?: 在每天下午2点到下午2:59期间的每1分钟触发
  • 0 0/5 14 * * ?: 在每天下午2点到下午2:55期间的每5分钟触发
  • 0 0/5 14,18 * * ?: 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
  • 0 0-5 14 * * ?: 在每天下午2点到下午2:05期间的每1分钟触发
  • 0 10,44 14 ? 3 WED: 每年三月的星期三的下午2:10和2:44触发
  • 0 15 10 ? * MON-FRI: 周一至周五的上午10:15触发
  • 0 15 10 15 * ?: 每月15日上午10:15触发
  • 0 15 10 L * ?: 每月最后一日的上午10:15触发
  • 0 15 10 ? * 6L: 每月的最后一个星期五上午10:15触发
  • 0 15 10 ? * 6L 2002-2005: 2002年至2005年的每月的最后一个星期五上午10:15触发
  • 0 15 10 ? * 6#3: 每月的第三个星期五上午10:15触发
  • 0 15 10 ? * 6#3: 每月的第三个星期五上午10:15触发

在线Cron表达式生成器