quartz入门(检测订单超时不建议用这个,消耗内存)

本文介绍Quartz任务调度框架,包括其核心组件、存储方式、触发器类型等,并提供了一个简单的RAM方式的示例。Quartz适用于Java应用程序,能实现定时任务的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Quartz介绍

   任务调度框架“Quartz”是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是完全由java开发的一个开源的任务日程管理系统,

   “任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。

   简单来说就是实现“计划(或定时)任务”的系统,例如:订单下单后未付款,15分钟后自动撤消订单,并自动解锁锁定的商品

Quartz里面:1.调度器   2.任务管理     3.触发器

2. Quartz的触发器

   触发器用来告诉调度程序作业什么时候触发。框架提供了5种触发器类型,但两个最常用的SimpleTrigger和CronTrigger。

   五种类型的Trigger(定时器)

   SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar类( org.quartz.Calendar)。

   场景:

   SimpleTrigger:执行N次,重复N次

   CronTirgger:几时几分几秒,哪天/哪月/哪年,执行

3. 存储方式

   RAMJobStore(内存作业存储类型)和JDBCJobStore(数据库作业存储类型),两种方式对比如下:

                优点                                    缺点

   RAMJobStore  不要外部数据库,配置容易,运行速度快    因为调度程序信息是存储在被分配给JVM的内存里面,

所以,当应用程序停止运行时,所有调度信息将被丢失。

  另外因为存储到JVM内存里面,所以可以存储多少个Job和Trigger将会受到限制

   JDBCJobStor  支持集群,因为所有的任务信息都会保存    运行速度的快慢取决与连接数据库的快慢到数据库中,可以控制事物,还有就是如果应用服务器关闭或者重启,任务信息都不会丢失,并且可以恢复因服务器关闭或者重启而导致执行失败的任务   

5. 核心类和核心类之间关系

  5.1 QuartzSchedulerThread

      负责执行向QuartzScheduler注册的触发Trigger的工作的线程。

  5.2ThreadPool

      Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提供运行效率。

  5.3QuartzSchedulerResources

      包含创建QuartzScheduler实例所需的所有资源(JobStore,ThreadPool等)。

  5.4 SchedulerFactory

      提供用于获取调度程序实例的客户端可用句柄的机制。

  5.5 JobStore

      通过类实现的接口,这些类要为org.quartz.core.QuartzScheduler的使用提供一个org.quartz.Job和org.quartz.Trigger存储机制。

      作业和触发器的存储应该以其名称和组的组合为唯一性。

  5.6QuartzScheduler

      这是Quartz的核心,它是org.quartz.Scheduler接口的间接实现,包含调度org.quartz.Jobs,注册org.quartz.JobListener实例等的方法。

  5.7 Scheduler

      这是Quartz Scheduler的主要接口,代表一个独立运行容器。调度程序维护JobDetails和触发器的注册表。

      一旦注册,调度程序负责执行作业,当他们的相关联的触发器触发(当他们的预定时间到达时)。

  5.8 Trigger

      具有所有触发器通用属性的基本接口,描述了job执行的时间出发规则。 - 使用TriggerBuilder实例化实际触发器。

  5.9 JobDetail

      传递给定作业实例的详细信息属性。 JobDetails将使用JobBuilder创建/定义。

  5.10  Job:

       要由表示要执行的“作业”的类实现的接口。只有一个方法

       void execute(jobExecutionContext context)

(jobExecutionContext 提供调度上下文各种信息,运行时数据保存在jobDataMap中)

       Job有个子接口StatefulJob ,代表有状态任务。

有状态任务不可并发,前次任务没有执行完,后面任务处于阻塞等到

  注1:这里面最最重要的接口是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。

       翻译:Scheduler的中文是:“调度程序,日程安排程序”

6. 配置文件quartz.properties

   内容分如下几个部分  

   Quartz Schedular主配置、ThreadPool设置、JobStore配置、DataSources、JDBC-JobStore群集

7. JDBC插入表顺序

   Simple_trigger :插入顺序

   qrtz_job_details —> qrtz_triggers —> qrtz_simple_triggers

   qrtz_fired_triggers

   Cron_Trigger:插入顺序

   qrtz_job_details —> qrtz_triggers —> qrtz_cron_triggers

   qrtz_fired_triggers

8. Quartz简单入门Demo(RAM方式),版本quartz.2.2.1

  8.1 导入依赖

      <dependency>

           <groupId>org.quartz-scheduler</groupId>

           <artifactId>quartz</artifactId>

           <version>2.2.1</version>

      </dependency>

      <dependency>

           <groupId>org.quartz-scheduler</groupId>

           <artifactId>quartz-jobs</artifactId>

           <version>2.2.1</version>

      </dependency>

  8.2 创建自定义RamJob

      必须实现org.quartz.Job接口

      RamJob

  8.3 启动quartz

      详细代码见“Demo1.java”

9. cronExpression表达式解释

   这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *   

                          格式:    [秒] [分] [小时] [日] [月] [周] [年]

   常用示例

   每天凌晨2点  0 0 2 * * ?和每天隔一小时 0 * */1 * * ?

   例1:每隔5秒执行一次:*/5 * * * * ?

   例2:每隔5分执行一次:0 */5 * * * ?

10. 关键单词

    Scheduler:调度程序,日程安排程序

    Job:任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值