hutool-cron模块的使用

记录下定时任务的模块的使用,还算比较实用,做个分享。

Hutool-cron使用文档

1.介绍

Hutool的定时任务模块与Linux的Crontab使用上非常类似,通过一个cron.setting配置文件,简单调用start()方法即可简单使用。

同时还提供了秒匹配和年匹配等Quartz才有的功能,定时任务表达式上也同时兼容Crontab(Cron4j)和Quartz的表达式,

在调用定时任务的时候是通过反射的方式进行调用的。

2.配置使用

配置文件cron.setting

#------------------------------------------------------------------
# 定时任务配置文件
# 定时任务表达分为以下几种情况:
# 1. 表达式为5位,此时兼容Linux的Crontab模式,第一位匹配分,此时如果为秒匹配模式,则秒部分为固定值(取决于加入表达式时当前时间秒数)
# 2. 表达式为6位,此时兼容Quartz模式,第一位匹配秒,但是只有秒匹配模式时秒部分定义才有效
# 3. 表达式为7位,此时兼容Quartz模式,第一位匹配秒,最后一位匹配年
#------------------------------------------------------------------

# cn.hutool.cron.demo.TestJob.doTest = */1 * * * * *

[cn.hutool.cron.demo]
# 6位表达式在秒匹配模式下可用,此处表示每秒执行一次
# TestJob.doTest = */1 * * * * *
# 5位表达式在分匹配模式下可用,此处表示每分钟执行一次
# 如果此时为秒匹配模式,则秒部分为固定数字(此秒取决于加入表达式当前时间的秒数)
#TestJob.doTest = 0/5 * * * * ?
TestJob2.doTest = */5 * * * * *

说明:配置文件的位置可以放在src/main/resources/config下,也可以放在src/main/resources/下。配置文件中可以写全类名.方法名后面跟crontab的表达式,也可以在[]括号里写包名称,下面写类名称.方法名。

调度的调用

CronUtil.setMatchSecond(true);//匹配秒的部分
CronUtil.start(false);//参数为false表示,主线程一直不退出,如果退出了,就无法执行调度任务了

如果设置为true或者不设置,由于主线程走完会立刻关闭。需要自己设置睡眠然后关闭定时任务。

CronUtil.setMatchSecond(true);
CronUtil.start(true);

ThreadUtil.sleep(300000);
CronUtil.stop();

3.动态的定时任务

动态添加定时任务就不用写配置文件了,可以直接在代码中创建定时任务,当然如果此时已经对配置文件做了配置,又动态创建了定时任务,此时执行启动的时候,配置的定时任务和动态创建的定时任务都会执行。

CronUtil.schedule("*/2 * * * * *", new Task() {
    @Override
    public void execute() {
        Console.log("Task excuted.");
    }
});

// 支持秒级别定时任务
CronUtil.setMatchSecond(true);
CronUtil.start(false);

4.任务的添加和移除

CronUtil.setMatchSecond(true);
CronUtil.start(false);
//  */5 * * * * * cn.hutool.cron.demo.TestJob2.doTest
/**
 * 配置文件里配置了该定时任务,该方法会清除掉所有的定时任务。
 */
CronUtil.getScheduler().clear();
// 重新动态加入该定时任务
String id = CronUtil.schedule("*/2 * * * * *",
      (Runnable) () -> Console.log("task running : "+ DateUtil.now()));
ThreadUtil.sleep(30000);
// 移除上一个定时任务
CronUtil.remove(id);
Console.log("Task Removed");
// 继续加入新的定时任务
CronUtil.schedule("*/3 * * * * *",
      (Runnable) () -> Console.log("New task add running : "+DateUtil.now()));
Console.log("New Task added.");
/**
 * 最后就剩下了最后一个定时任务
 */

5.自定义配置文件

默认只识别这两个路径的配置文件:

/** Crontab配置文件 */
public static final String CRONTAB_CONFIG_PATH = "config/cron.setting";
public static final String CRONTAB_CONFIG_PATH2 = "cron.setting";

我们可以自己定义配置文件,将cron.setting重命名为cron_auto.setting,用该代码调用即可:

CronUtil.setCronSetting(new Setting("config/cron_auto.setting"));
CronUtil.setMatchSecond(true);
CronUtil.start(false);
来源:秦皇岛SEO
上一篇:js基础6 — 字符串基本操作


下一篇:不要再封装各种Util工具类了,这个Java神级框架值得一用