Quartz初浅使用

1、Quartz 简介

本教程建立在 SSM 整合点 Maven 项目的商城网站上 实现概览:通过提交商品订单,限制用户在规定时间付款,若仍未付款达到规定时间取消订单动作。


  • 官方介绍

Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Quartz 可以用来创建简单或为运行十个,百个,甚至是好几万个 Jobs 这样复杂的程序。Jobs 可以做成标准的 Java 组件或  EJBs。 Quartz 用一个小 Java 库发布文件(.jar 文件),这个库文件包含了所有 Quartz 核心功能。这些功能的主要接口(API)是 Scheduler 接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。

2、下载及其安装

2.1 下载

官方 Site: http://www.quartz-scheduler.org

Click 下 Download 即可下载最新 这里显示最新为 2.2.3

2.2 添加 Maven 依赖

一般使用 Quartz 以及 Spring4 框架整合使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>

和 Spring 整合,需要 spring-context-support 的 jar 包

3、简单剖析

Quartz 框架简单架构

  1. Schedule ——  核心调度器
  2. Job ——  任务
  3. JobDetail ——  执行任务器
  4. Tigger ——  触发器

使用方法:

  1. 制作一个任务 Job java 类 需要一个执行方法
  2. 将类放到 spring 容器内,注意需要注解
  3. 配置 jobDetail,指定相应的任务 job
  4. 配置一个 Tigger,编写一个由 corn 表达式的触发方法的触发器
  5. 配置一个配置调度工厂

执行流程图:

4、使用教程

4.1 创建一个 Job Java 类

值得注意需要声明 execute()

1
2
3
4
5
6
7
8
public class Scheduler1 {
public void execute()
{
System.out.println("The task has been completed...");
System.out.println("Tasks to complete!");
System.out.println(new Date());
}
}

4.2 配置 Spring

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- 配置job类 -->
<bean id="scheduler1" class="com.hmall.order.schedule.Scheduler1"></bean>
<!-- 配置JobDetail执行任务器 -->
<bean id="SpringQtzJobMethod"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="scheduler1"></ref> <!-- 要执行的job名称 -->
</property>
<property name="targetMethod"> <!-- 要执行的方法名称 -->
<value>execute</value>
</property>
</bean>
<!-- 配置Trigger调度触发器 -->
<bean id="CronTriggerBean"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="SpringQtzJobMethod"></property>
<property name="cronExpression" value="0/5 * * * * ?"></property>
</bean>
<!-- 配置调度工厂 -->
<bean id="SpringJobSchedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="CronTriggerBean"></ref>
</list>
</property>
</bean>

值得注意:
1. job:scheduler1 – jobDetail:scheduler1 job:SpringQtzJobMethod – Trigger:SpringQtzJobMethod Trigger:CronTriggerBean – FactoryBean:CronTriggerBean 2.需要使用 corn 表达式

4.3 运行调试

运行 Maven 项目  clean tomcat7:run

1
2
3
4
5
DEBUG - Calling execute on job DEFAULT.SpringQtzJobMethod
DEBUG - batch acquisition of 1 triggers
The task has been completed...
Tasks to complete!
Wed Jun 20 11:46:20 CST 2018

看到以上 success 即成功

5、Corn 表达式

Cron 表达式的说明

字段名 允许的值 允许的特殊字符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / L W C
1-12 or JAN-DEC , - * /
1-7 or SUN-SAT , - * ? / L C #
empty, 1970-2099 , - * /

Cron 字符的说明

字符名 字符说明
“?”字符 表示不确定的值
“,”字符 指定数个值
“-”字符 指定一个值的范围
“/”字符 指定一个值的增加幅度。n/m 表示从 n 开始,每次增加 m
“L”字符 用在日表示一个月中的最后一天,用在周表示该月最后一个星期 X
“W”字符 指定离给定日期最近的工作日(周一到周五)
“#”字符 表示该月第几个周 X。6#3 表示该月第 3 个周五

Cron 常用表达式案例说明

表达式 含义
0 0 12 ? 每天中午 12 点触发
0 15 10 ? 每天上午 10:15 触发
0 15 10 ? 每天上午 10:15 触发
0 15 10 ? * 每天上午 10:15 触发
0 15 10 ? 2005 年的每天上午 10:15 触发
0 *14 ** ? 在每天下午 2 点到下午 2:59 期间的每 1 分钟触发
0 0/5 14 ? 在每天下午 2 点到下午 2:55 期间的每 5 分钟触发
0 0/5 14,18 ? 在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发
0 0-5 14 ? 在每天下午 2 点到下午 2:05 期间的每 1 分钟触发
0 10,44 14 ? 3 WED 每年三月的星期三的下午 2:10 和 2:44 触发
0 15 10 ? * MON-FRI 周一至周五的上午 10:15 触发
0 15 10 15 * ? 每月 15 日上午 10:15 触发
0 15 10 L * ? 每月最后一日的上午 10:15 触发
0 15 10 ? * 6L 每月的最后一个星期五上午 10:15 触发
0 15 10 ? * 6L 2002-2005 2002 年至 2005 年的每月的最后一个星期五上午 10:15 触发
0 15 10 ? * 6#3 每月的第三个星期五上午 10:15 触发

Cron 表达式构造器

Site: http://cron.qqe2.com
Jar 软件: CronExpBuilder-1.0

作者

Catooilg

发布于

2020-08-17

更新于

2023-02-05

许可协议

评论