Quartz任务调度框架学习

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值