org.quartz.Scheduler讲解(通义灵码)

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();
    

四、使用流程总结

  1. 创建任务:通过 JobBuilder 构建 JobDetail
  2. 定义触发器:通过 TriggerBuilderSimpleScheduleBuilderCronScheduleBuilder 创建 Trigger
  3. 注册任务:调用 scheduler.scheduleJob(jobDetail, trigger) 注册任务。
  4. 控制任务:使用 pauseJob, resumeJob, deleteJob 控制任务生命周期。
  5. 关闭调度器:应用关闭时调用 shutdown() 清理资源。

五、注意事项

  • 并发问题:默认情况下,Quartz 允许并发执行任务,可以通过 @DisallowConcurrentExecution 注解禁止并发。
  • 持久化:如果需要任务在系统重启后继续执行,需配置 Quartz 的持久化存储(如数据库)。
  • 异常处理:任务执行过程中抛出的异常不会中断调度器,但建议在 Job 实现中进行日志记录和异常捕获。

通过以上方式,你可以灵活地利用 Scheduler 实现动态任务调度功能,满足不同场景下的定时任务需求。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • https://www.cnblogs.com/drift-ice/p/3817269.html https://...
    无名焰火阅读 3,693评论 0 0
  • quartZ 注:本文章只是自己在学习中记的笔记(可能有点乱),只提供参考。如有错误请指出。 一.简介 Quart...
    沃林阅读 4,476评论 0 0
  • 很多的项目文件都需要备份,Linux系统提供了一个crontab可以帮助我们完成这个定时任务http://www....
    帅可儿妞阅读 12,473评论 0 2
  • Quartz是什么 Quartz是一个开源的作业调度包,能够运行在几乎任何java项目中,小到单机应用,大到电商系...
    零度沸腾_yjz阅读 8,393评论 0 9
  • 1. 概念 Scheduler- 定时任务的调度器,定义了定时任务的外部交互接口。 Job - 需要执行的任务必须...
    月落蝶殇_2798阅读 1,297评论 0 0

友情链接更多精彩内容