核心概念

  • Scheduler(调度器):Quartz中的任务调度器,通过Trigger和JobDetail可以用来调度、暂停和删除任务。
  • Trigger(触发器):Quartz中的触发器,可以通过CRON表达式来指定任务执行的时间,时间到了会自动触发任务执行。
  • JobDetail(任务详情):Quartz中需要执行的任务详情,包括了任务的唯一标识和具体要执行的任务,可以通过JobDataMap往任务中传递数据。
  • Job(任务):Quartz中具体的任务,包含了执行任务的具体方法。

开发配置

增加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-quartz</artifactId>
  4. </dependency>

yaml配置信息

  1. quartz:
  2. jdbc:
  3. # 初始化Quartz表结构,项目第一次启动配置程always,然后改成never 否则已生成的job会被初始化掉
  4. initialize-schema: always
  5. job-store-type: jdbc
  6. wait-for-jobs-to-complete-on-shutdown: true
  7. properties:
  8. org:
  9. quartz:
  10. threadPool:
  11. threadCount: 5
  12. threadPriority: 5
  13. threadsInheritContextClassLoaderOfInitializingThread: true
  14. jobStore:
  15. misfireThreshold: 5000
  16. class: org.quartz.impl.jdbcjobstore.JobStoreTX
  17. driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  18. #acquireTriggersWithinLock: true

参数说明

  1. #调度器实例名称
  2. org.quartz.scheduler.instanceName = quartzScheduler
  3. #调度器实例编号自动生成
  4. org.quartz.scheduler.instanceId = AUTO
  5. #持久化方式配置
  6. org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
  7. #持久化方式配置数据驱动,MySQL数据库
  8. org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  9. #quartz相关数据表前缀名
  10. org.quartz.jobStore.tablePrefix = QRTZ_
  11. #开启分布式部署
  12. org.quartz.jobStore.isClustered = true
  13. #配置是否使用
  14. org.quartz.jobStore.useProperties = false
  15. #分布式节点有效性检查时间间隔,单位:毫秒
  16. org.quartz.jobStore.clusterCheckinInterval = 10000
  17. #线程池实现类
  18. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
  19. #执行最大并发线程数量
  20. org.quartz.threadPool.threadCount = 10
  21. #线程优先级
  22. org.quartz.threadPool.threadPriority = 5
  23. #配置为守护线程,设置后任务将不会执行
  24. #org.quartz.threadPool.makeThreadsDaemons=true
  25. #配置是否启动自动加载数据库内的定时任务,默认true
  26. org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

Quartz表介绍

表名 简介
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息
QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息
QRTZ_FIRED_TRIGGERS 存储与已触发的 Trigger 相关的状态信息,以及相联 Job的执行信息 QRTZ_PAUSED_TRIGGER_GRPS 存储已暂停的 Trigger 组的信息
QRTZ_SCHEDULER_STATE 存储少量的有关 Scheduler 的状态信息,和别的 Scheduler实例(假如是用于一个集群中)
QRTZ_LOCKS 存储程序的悲观锁的信息(假如使用了悲观锁)
QRTZ_JOB_DETAILS 存储每一个已配置的 Job 的详细信息
QRTZ_JOB_LISTENERS 存储有关已配置的 JobListener 的信息
QRTZ_SIMPLE_TRIGGERS 存储简单的Trigger,包括重复次数,间隔,以及已触的次数
QRTZ_BLOG_TRIGGERS Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
QRTZ_TRIGGER_LISTENERS 存储已配置的 TriggerListener 的信息
RTZ_TRIGGERS 存储已配置的 Trigger 的信息

参考

http://www.justdojava.com/2020/12/22/springboot-quart-cluster/