https://www.hoshino.asia/archives/hutool

概述

由来

Java中定时任务使用的最多的我想就是quartz了,但是这个框架太过庞大,而且我也不需要用到这么多东西,使用方法也是比较复杂(官方Demo我实在是无语……)。

用过Linux的crontab的人都知道,使用其定时的表达式可以非常灵活的定义定时任务的时间以及频率(Linux的crontab精确到分,而Quartz的精确到秒,不过对我来说精确到分已经够用了,精确到秒的可以使用Timer可以搞定),然后就是crontab的那个迷人的配置文件,可以把定时任务很清晰的罗列出来,这个我也是比较喜欢的。(记得当时Spring整合Quartz的时候那XML看的我眼都花了……)。于是Hutool-cron诞生。

介绍

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

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

全局定时任务-CronUtil

介绍

CronUtil通过一个全局的定时任务配置文件,实现统一的定时任务调度。

使用

1、配置文件

对于Maven项目,首先在src/main/resources/config下放入cron.setting文件(默认是这个路径的这个文件),然后在文件中放入定时规则,规则如下:

# 我是注释
[com.company.aaa.job]
TestJob.run = */10 * * * *
TestJob2.run = */10 * * * *

中括号表示分组,也表示需要执行的类或对象方法所在包的名字,这种写法有利于区分不同业务的定时任务。

TestJob.run表示需要执行的类名和方法名(通过反射调用,不支持Spring和任何框架的依赖注入),*/10 * * * *表示定时任务表达式,此处表示每10分钟执行一次,以上配置等同于:

com.company.aaa.job.TestJob.run = */10 * * * *
com.company.aaa.job.TestJob2.run = */10 * * * *

提示 关于表达式语法,见:https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

2、启动

CronUtil.start();

如果想让执行的作业和定时任务线程同时结束,可以将定时任务设为守护线程,需要注意的是,此模式下会在调用stop时立即结束所有作业线程,请确保你的作业可以被中断:

//使用deamon模式,
CronUtil.start(true);

3、关闭

CronUtil.stop();

更多选项

秒匹配和年匹配

考虑到Quartz表达式的兼容性,且存在对于秒级别精度匹配的需求,Hutool可以通过设置使用秒匹配模式来兼容。

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

此时Hutool可以兼容Quartz表达式(5位表达式、6位表达式都兼容)

动态添加定时任务

当然,如果你想动态的添加定时任务,使用CronUtil.schedule(String schedulingPattern, Runnable task)方法即可(使用此方法加入的定时任务不会被写入到配置文件)。

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

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

Ciallo~(∠・ω< )⌒☆