简单定时任务 Quartz
Quartz 的集成与简化
原生的 Quartz 虽然功能强大,但在使用上可能会显得比较复杂。为了简化开发与维护,笔者使用了 tio-utils
对 Quartz 进行了简单封装,使其更加易用。
以下是与 Quartz 集成的主要工具类:
com.litongjava.tio.utils.quartz.QuartzUtils
com.litongjava.tio.utils.quartz.AbstractJobWithLog
由于 tio-boot
已经内置了 tio-utils
,因此在项目中只需添加 Quartz 及其扩展的依赖即可。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
创建任务类
接下来,创建一个定时任务类。该类需要继承 AbstractJobWithLog
并重写 run
方法。
import org.quartz.JobExecutionContext;
import com.litongjava.tio.utils.quartz.AbstractJobWithLog;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class DemoTask extends AbstractJobWithLog {
@Override
public void run(JobExecutionContext context) throws Exception {
log.info("任务执行上下文: {}", context);
}
}
创建配置文件
在 src/main/resources/config
目录下创建名为 tio-quartz.properties
的配置文件,用于定义任务的调度规则。例如,每 10 秒执行一次任务,可以配置如下内容:
# 每10秒执行一次
demo.timetask.DemoTask = 0/10 * * * * ?
配置 QuartzUtils.start() 启动任务
在配置类中启动 Quartz,并将其与应用的生命周期进行绑定:
import com.litongjava.jfinal.aop.annotation.AConfiguration;
import com.litongjava.jfinal.aop.annotation.AInitialization;
import com.litongjava.tio.boot.server.TioBootServer;
import com.litongjava.tio.utils.quartz.QuartzUtils;
@AConfiguration
public class QuartzConfig {
@Initialization
public void config() {
// 启动 Quartz 定时任务
QuartzUtils.start();
// 在应用销毁时停止 Quartz
TioBootServer.me().addDestroyMethod(() -> {
QuartzUtils.stop();
});
}
}
需要注意的是,Quartz 与 hotswap-classloader
无需整合,因为 Quartz 对任务的操作都是静态的。
Cron 表达式说明
Cron 表达式用于指定任务的执行时间,其格式如下:
[秒] [分] [小时] [日] [月] [周] [年]
其中,[年] 是可选的,可以省略。星号 (*
) 表示在每个单位时间执行,问号 (?
) 用于表示在 [日] 和 [周] 字段中不指定值。
常用 Cron 表达式示例
每 1 分钟执行一次:
0 */1 * * * ?
每 5 分钟执行一次:
0 */5 * * * ?
每 10 分钟执行一次:
0 */10 * * * ?
每 30 分钟执行一次:
0 */30 * * * ?
每 1 小时执行一次:
0 0 */1 * * ?
每 2 小时执行一次:
0 0 */2 * * ?
每 3 小时执行一次:
0 0 */3 * * ?
每 6 小时执行一次:
0 0 */6 * * ?
每 12 小时执行一次:
0 0 0,12 * * ?
每 24 小时(每天)执行一次:
0 0 0 * * ?
通过以上步骤,可以快速集成并配置 Quartz 定时任务,简化开发过程,提高项目的可维护性。