Quartz 任务调度框架
可运行的测试项目demo
地址:https://gitee.com/mtmtcode/learnquartz
一 、简介
(一)Quartz是什么
Quartz是一款功能丰富、开源免费的任务调度库。其可以创建简单或复杂的调度表,可以执行成千上万个任务。任务被定义为标准的Java组件,可以执行我们需要执行的业务。Quartz支持事务和集群。Quartz的数据,任务和触发器的相关数据都保存在内存中,不在数据库中。
(二)Quartz能做什么
可以做定时任务。
- 驱动流程工作流。例如:最初作为一种新的订单,安排一个任务在2小时,检查这订单的状态,并触发一个警告通知如果订单确认消息尚未收到的订单,以及改变订单的状态为“等待干预”。
- 系统维护。设置系统在具体时间执行。eg:安排一个任务在每个工作日(除了节假日以外的所有工作日)晚上11:30将数据库的内容转储到XML文件中。
- 提供提醒服务。
(三)Quartz怎么做
通过触发指定的触发器来调度任务。触发器的触发时机可以是:
- 在一天的某个时间
- 在一周的某些日子
- 在一月的某些天
- 在一年的某些天
- 注册日历中不需要列出的特定日期(某些需要排除的日子)。
- 重复特定次数。
- 重复直到特定的日子。
- 无限重复。
- 重复一个延迟间隔。
任务和触发器可以以组的方式进行统一管理。由程序员自己实现。一个任务可以注册多个触发器。
(四)Spring框架集成Quartz怎么执行任务
- 任务:普通的java类。
- 调度触发器,添加监测任务的触发器。
- 调度工厂 org.springframework.scheduling.quartz.SchedulerFactoryBean,添加触发器。
1.创建调度任务
//任务一
public class MyJob_1
public void sayHello() {
System.out.println(new Date() + " -> Hello, 我是任务 1");
}
}
//任务2
public class MyJob_2{
public void sayHello2(){
System.out.println(new Date() + " -> Hello, 我是任务 2");
}
}
2.注册调度任务
3.注册监测任务的触发器
4.注册调度工厂
<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName" xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 一、任务1 -->
<!--1.注册任务1-->
<bean id="MyJob_1" class="com.mt.job.MyJob_1"/>
<!--1.1.定义目标任务bean中要执行的方法-->
<bean id="jobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 执行的类 -->
<property name="targetObject">
<ref bean="MyJob_1"/>
</property>
<!-- 执行的方法 -->
<property name="targetMethod">
<value >execute</value><!--要执行的方法-->
</property>
</bean>
<!--2、定义任务1触发器-->
<bean id="CronTriggerBean_1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail_1"></property>
<!-- 每一秒钟执行一次 -->
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>
<!-- 二、定义任务2 -->
<!--1.注册任务2-->
<bean name="myJob_2" class="com.mt.job.MyJob_2">
</bean>
<!--1.1.定义目标任务bean中要执行的方法-->
<bean id="jobDetail_2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 执行的类 -->
<property name="targetObject">
<ref bean="myJob_2" />
</property>
<!-- 类中的方法 -->
<property name="targetMethod">
<value>sayHello2</value>
</property>
</bean>
<!--2.定义任务2触发器-->
<bean id="CronTriggerBean_2" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail_2"></property>
<!-- 每一秒钟执行一次 -->
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>
<!--三、定义调度器 统一管理触发器-->
<bean id="SpringJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="CronTriggerBean_1"></ref>
<ref bean="CronTriggerBean_2"></ref>
</list>
</property>
</bean>
</beans>
5.依赖环境
Spring版本:3.0.6.RELEASE
Quartz版本:1.8.6
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<springframework.version>3.0.6.RELEASE</springframework.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
</dependency>
<!-- quartz任务调度依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.6</version>
</dependency>
</dependencies>
在web.xml添加applicationContext.xml配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:webapp/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>