# Quartz Framework **Repository Path**: karrycui/quartz-framework ## Basic Information - **Project Name**: Quartz Framework - **Description**: spring boot 整合 Quartz 框架,实现分布式调度 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-10-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Quartz Framework #### 介绍 spring boot 整合 Quartz 框架,支持集群定时任务管理 #### 软件架构 spring boot + quartz框架 + mysql #### 版本 1. spring boot:2.1.9.RELEASE 2. Quartz框架:2.3.0 3. mysql:8.0.17 #### 整合详细教程 1. Maven依赖:spring 与 spring boot相关、quartz、及mysql驱动(分布式部署需要使用到锁机制,故需要使用到数据库) 2. 实现步骤 - [x] 第一步:配置Job —— 共有两种方式来进行Job的配置 - MethodInvokingJobDetailFactoryBean - JobDetailFactoryBean:常用,可以使用属性jobDataMap为配置的job传递参数(依需求而定,非必须) 注:自定义的任务类(属性 jobClass)有两种实现方式: - 第一种为继承QuartzJobBean抽象类,实现executeInternal方法; - 第二种为实现Job接口 - [x] 第二步:配置触发器(tigger) —— 提供了两种触发器类型 - 简单触发器:SimpleTriggerFactoryBean - Corn触发器:CronTriggerFactoryBean(重点,使用起来更加灵活) 注:corn表达式可以使用在线生成器形成:http://cron.qqe2.com/ - [x] 第三步:配置全局调度器(schedule)—— 提供了两种调度器类型 - 内存RAMJobStore:job的相关信息存储在内存里,每个节点存储各自的,互相隔离 - (重点)数据库方式:job的相关信息存储在数据库中,所有节点共用数据库,每个节点通过数据库来通信,保证一个job同一时间只会在一个节点上执行,并且如果某个节点挂掉,job会被分配到其他节点执行;本方式需要使用到数据源,在实际的项目之中,根据实际情况是否使用多数据源。 3. 官方quartz-2.3.0-distribution.tar.gz包 - [x] 数据表相关信息:官方针对不同的数据库提供了相应的sql文件,共11张相关库表;相对路径:src/org/quartz/impl/jdbcjobstore - [x] Quartz的配置文件:相对路径src/org/quartz;这里需要将quartz.properties拷贝出来做一些修改。 #### 注意事项 1. spring管理的bean的注入问题 - [x] 默认情况下,spring管理的bean不能注入到定时任务中,故在启动定时任务的时候,如果程序中使用到了spring管理的bean,则会报空指针异常; - [x] spring为了更好的支持Quartz框架,提供了相应的类库进行支持: 2. 更新定时任务的配置问题 如果需要更新定时任务的配置,则需要进行如下操作: - [x] 第一步:修改配置文件内容 - [x] 第二步:更新库表QRTZ_TRIGGERS中相应字段的内容(建议删除掉对应的数据行,重新启动程序即可再次生成) 3. 多个定时任务的配置问题 - [x] 可以在一个调度器下面配置多个触发器 - [x] 一个触发器对应一个JOB 4. 库表QRTZ_TRIGGERS - [x] 该库表用于存储触发器的相关信息,在程序启动的时候,会依据定时任务的相关配置写入指定的数据 - [x] 相关字段 - SCHED_NAME:调度器名称 - TRIGGER_NAME:触发器名称 - TRIGGER_GROUP:触发器所属组别 - JOB_NAME:定义的Job的名称 - JOB_GROUP:定义的Job的组别 - NEXT_FIRE_TIME:记录下一次该定时任务执行的时间(毫秒数) - PREV_FIRE_TIME:记录上一次定时任务执行的时间,如果是首次执行,在没有执行前该值为 -1 - TRIGGER_STATE:当前触发器的状态,如果是等待执行阶段,该值为:WAITING 5. 11张库表的创建问题 在程序启动之前必须保证数据库可用,并且使用官方Quartz开发包中的sql脚本创建相关库表。