任务调度

目录

  • 基本任务调度
  • 分布式任务调度

基本任务调度

方案1:通过 @Cron 注解,这个需要依赖 cron4j 框架:

  1. //1分钟执行一次
  2. @Cron("*/1 * * * *")
  3. public class MyTask implements Runnable {
  4. @Override
  5. public void run() {
  6. System.out.println("task running...");
  7. }
  8. }

Cron表达式详解:

Cron 表达式最多只允许五部分,每部分用空格分隔开来,这五部分从左到右依次表示分、时、天、月、周,其具体规则如下:

  • 分 :从 0 到 59
  • 时 :从 0 到 23
  • 天 :从 1 到 31,字母 L 可以表示月的最后一天
  • 月 :从 1 到 12,可以别名:jan”, “feb”, “mar”, “apr”, “may”, “jun”, “jul”, “aug”, “sep”, “oct”, “nov” and “dec”
  • 周 :从 0 到 6,0 表示周日,6 表示周六,可以使用别名: “sun”, “mon”, “tue”, “wed”, “thu”, “fri” and “sat”

如上五部分的分、时、天、月、周又分别支持如下字符,其用法如下:

  • 数字 n:表示一个具体的时间点,例如 5 表示 5 分这个时间点时执行
  • 逗号 , :表示指定多个数值,例如 3,5 表示 3 和 5 分这两个时间点执行
  • 减号 -:表示范围,例如 1-3 表示 1 分、2 分再到 3 分这三个时间点执行
  • 星号 :表示每一个时间点,例如 表示每分钟执行
  • 除号 /:表示指定一个值的增加幅度。
    • 例如 */5表示每隔5分钟执行一次(序列:0:00, 0:05, 0:10, 0:15 等等)。
    • 再例如3-18/5 是指在从3到18分钟值这个范围之中每隔5分钟执行一次(序列:0:03, 0:08, 0:13, 0:18, 1:03, 1:08 等等)。

方案2:Jboot 通过 ScheduledThreadPoolExecutor 封装一个轻量的任务调度框架,使用方法如下:

  1. @FixedDelay(period = 5)
  2. public class MyTask implements Runnable {
  3. @Override
  4. public void run() {
  5. System.out.println("task running...");
  6. }
  7. }

方案3:使用 JFinal 自带的任务调度方案,参考文档:https://www.jfinal.com/doc/9-1

分布式任务调度

分布式任务在以上的 基本任务调度 的基础上,只需要添加 @EnableDistributedRunnable 注解即可,例如:

示例1:

  1. @Cron("*/1 * * * *")
  2. @EnableDistributedRunnable
  3. public class MyTask implements Runnable {
  4. @Override
  5. public void run() {
  6. System.out.println("task running...");
  7. }
  8. }

示例2:

  1. @FixedDelay(period = 5)
  2. @EnableDistributedRunnable
  3. public class MyTask implements Runnable {
  4. @Override
  5. public void run() {
  6. System.out.println("task running...");
  7. }
  8. }

注意:分布式任务调度需要依赖 redis,因此,在使用分布式任务之前需要做好如下配置:

  1. jboot.redis.host = 127.0.0.1
  2. jboot.redis.password =