记录下定时任务的模块的使用,还算比较实用,做个分享。
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