Scheduler 是 Quartz 框架中的核心接口,用于管理任务的调度和执行。它提供了丰富的 API 来支持任务的动态创建、暂停、恢复、删除等操作。
一、Scheduler 的主要能力
1. 任务调度
- 可以将
JobDetail(任务)与Trigger(触发器)绑定,启动定时任务。 - 示例:
scheduler.scheduleJob(JobDetail, Trigger);
2. 任务管理
a. 启动任务
JobDetail jobDetail = JobBuilder.newJob(DynamicJob.class)
.withIdentity(jobName, jobGroup)
.storeDurably()
.build();
SimpleScheduleBuilder scheduleBuilder =
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(intervalSeconds)
.repeatForever();
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(jobDetail)
.withIdentity(jobName + "Trigger", jobGroup)
.withSchedule(scheduleBuilder)
.build();
scheduler.scheduleJob(jobDetail, trigger);
b. 暂停任务
scheduler.pauseJob(JobKey.jobKey(jobName, jobGroup));
c. 恢复任务
scheduler.resumeJob(JobKey.jobKey(jobName, jobGroup));
d. 删除任务
scheduler.deleteJob(JobKey.jobKey(jobName, jobGroup));
e. 查询任务状态
- 可以通过以下方法查询任务是否存在或是否在运行:
-
checkExists(JobKey):检查任务是否存在。 -
getCurrentlyExecutingJobs():获取当前正在执行的任务列表。
-
二、关键组件说明
1. JobDetail
- 定义任务的基本信息,包括任务类(如 [DynamicJob.class](file://D:\Kindey.S\work\project\2502_平台共同组件单点登录\03_develop\dbts\target\classes\com\julong\dbts\quartz\DynamicJob.class))、任务名、组名等。
- 示例:
JobDetail jobDetail = JobBuilder.newJob(DynamicJob.class) .withIdentity("myJob", "group1") .storeDurably() .build();
2. Trigger
- 定义任务的执行规则(如时间间隔、重复次数等)。
- 常见类型:
-
SimpleTrigger:适用于固定频率执行的任务。 -
CronTrigger:适用于基于 cron 表达式的复杂调度。
-
- 示例(SimpleTrigger):
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever(); Trigger trigger = TriggerBuilder.newTrigger() .forJob(jobDetail) .withIdentity("myTrigger", "group1") .withSchedule(scheduleBuilder) .build();
三、生命周期管理
1. 启动调度器
- 在 Spring 环境下,通常由容器自动管理调度器的生命周期。
- 手动启动:
scheduler.start();
2. 关闭调度器
- 关闭调度器会停止所有任务。
- 示例:
scheduler.shutdown();
四、使用流程总结
-
创建任务:通过
JobBuilder构建JobDetail。 -
定义触发器:通过
TriggerBuilder和SimpleScheduleBuilder或CronScheduleBuilder创建Trigger。 -
注册任务:调用
scheduler.scheduleJob(jobDetail, trigger)注册任务。 -
控制任务:使用
pauseJob,resumeJob,deleteJob控制任务生命周期。 -
关闭调度器:应用关闭时调用
shutdown()清理资源。
五、注意事项
-
并发问题:默认情况下,Quartz 允许并发执行任务,可以通过
@DisallowConcurrentExecution注解禁止并发。 - 持久化:如果需要任务在系统重启后继续执行,需配置 Quartz 的持久化存储(如数据库)。
-
异常处理:任务执行过程中抛出的异常不会中断调度器,但建议在
Job实现中进行日志记录和异常捕获。
通过以上方式,你可以灵活地利用 Scheduler 实现动态任务调度功能,满足不同场景下的定时任务需求。