全局定时任务工具 - CronUtil
# 全局定时任务工具 - CronUtil
介绍
CronUtil
是一个全局定时任务调度工具,通过简单的配置文件即可实现多任务的定时调度,支持基于 Cron 表达式的任务调度,具备秒级别的精度控制。
# 一、使用步骤
# 1. 配置文件
在 Maven 项目中,通常在 src/main/resources/config
路径下创建 cron.setting
文件,默认情况下 CronUtil
会读取该文件并自动加载定时任务配置。配置文件的格式如下:
# 示例配置
[com.company.aaa.job]
TestJob.run = */10 * * * * # 每10分钟执行一次
TestJob2.run = 0 0/1 * * * * # 每1分钟执行一次
1
2
3
4
2
3
4
- 中括号部分:表示分组名称,通常是定时任务所在包的名称。分组可以帮助组织和区分不同业务模块的定时任务。
- 任务定义:格式为
类名.方法名 = Cron表达式
,通过反射调用指定类的静态方法来执行任务。
例如,上述配置等价于以下形式:
com.company.aaa.job.TestJob.run = */10 * * * *
com.company.aaa.job.TestJob2.run = 0 0/1 * * * *
1
2
2
Cron 表达式语法:有关 Cron 表达式的语法详解,请参考 Cron表达式参考链接 (opens new window)。
# 2. 启动定时任务
启动定时任务非常简单,只需调用 CronUtil.start()
方法即可:
public class Main {
public static void main(String[] args) {
// 启动定时任务
CronUtil.start();
}
}
1
2
3
4
5
6
2
3
4
5
6
如果需要将定时任务设置为守护线程(任务线程与应用程序一同终止),可以使用以下方式启动:
// 以守护线程模式启动定时任务
CronUtil.start(true);
1
2
2
注意:守护线程模式下,调用
CronUtil.stop()
时会立即中断所有作业线程,请确保作业线程支持中断。
# 3. 关闭定时任务
如果需要手动停止定时任务,可以调用:
// 停止所有定时任务
CronUtil.stop();
1
2
2
# 4. 动态添加定时任务
除了通过配置文件添加定时任务,还可以在运行时动态添加任务。可以使用 CronUtil.schedule
方法:
CronUtil.schedule("*/5 * * * * *", new Runnable() {
@Override
public void run() {
// 执行任务的代码
System.out.println("任务执行中...");
}
});
// 启动定时任务
CronUtil.setMatchSecond(true); // 支持秒级别任务
CronUtil.start();
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
schedule(String schedulingPattern, Runnable task)
:第一个参数是 Cron 表达式,第二个参数是要执行的任务。动态添加的任务不会写入配置文件。
# 二、更多选项
# 秒匹配和年匹配
为了兼容 Quartz 表达式,并满足秒级别的调度需求,可以启用秒匹配模式:
// 启用秒匹配模式,兼容 Quartz 表达式
CronUtil.setMatchSecond(true);
1
2
2
启用后,CronUtil
将支持 5 位、6 位 Cron 表达式(例如 */5 * * * * *
),精度达到秒级别。
# 配置文件示例
以下是一个完整的 cron.setting
配置文件示例:
# 定时任务配置
[com.myapp.job]
DailyReportJob.run = 0 0 8 * * * # 每天早上8点执行
DataBackupJob.run = 0 0 3 * * 1 # 每周一凌晨3点执行
1
2
3
4
2
3
4
# 实际开发中的应用场景
- 场景 1:定期生成报告。可以设置每天早上定时生成数据报告,并发送到指定邮箱。
- 场景 2:定期备份数据。每周或每天定时备份数据库,防止数据丢失。
- 场景 3:自动清理日志或缓存。定期清理过期的日志文件或缓存数据,减少磁盘占用。
CronUtil
是一个功能强大的定时任务调度工具,支持灵活的配置与动态调度。无论是在配置文件中统一管理,还是在代码中动态添加任务,都非常方便。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08