zoukankan      html  css  js  c++  java
  • Quartz理解与实现

    记录关于Quartz定时调度任务的知识点,知识点主要分为两个部分,第一个部分介绍Quartz,第二部分使用Quartz+Spring来配置使用Quartz的实际操作。

    (一)Quartz知识点

    Quartz是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定的时间到达时,负责执行(或者通知)其他组件的系统。 一句话概括:Quartz框架的核心就是调度器;

     

    Quartz 具有以下特点:强大的调度功能,灵活的应用方式,分布式和集群能力。

    我认为企业级应用Quartz框架的原因应该主要是它的分布式和集群能力,尤其是配合Zookeeper进行开发。

     

    quartz调度核心元素

    1. Scheduler:任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。
    2. Trigger:触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多。
    3. JobDetail:用来描述Job实现类及其它相关的静态信息,如Job名字、关联监听器等信息。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean两种实现,如果任务调度只需要执行某个类的某个方法,就可以通过MethodInvokingJobDetailFactoryBean来调用。
    4. Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务。

    (二)Quartz在Spring中的实际应用

    下面给出我配置的一个定时任务,而该任务的实现可以根据具体的场景进行实现。

    首先配置Spring:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
     
        <!--新添加的定时任务QuartzTestJob-->
        <bean id="quartzTestJob"
              class="cn.mwee.service.shop.quartz.QuartzTestJob" />
     
        <bean id="quartzTestTask"
              class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="quartzTestJob"/>
            <property name="targetMethod" value="execute"/>
            <property name="concurrent" value="false"/>
        </bean>
     
        <bean id="quartzTestTrigger"
              class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="quartzTestTask"/>
            <!--cron表达式-->
            <property name="cronExpression" value="*/10 * * * * ?"/>
        </bean>
     
     
        <!-- 总管理类 -->
        <bean id="startQuartz"
              class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="autoStartup" value="false"/>
            <property name="triggers">
                <list>
                    <!--<ref bean="koubeiCueWordTrigger"/>-->
                    <ref bean="quartzTestTrigger"/>
                </list>
            </property>
        </bean>
    </beans>

    具体实现的任务类QuartzTestJob:

    public class QuartzTestJob extends AbstractBaseJob{
        @Override
        public void work() {
            logger.info("QuartzTestJob START");
     
            logger.info("QuartzTestJob OVER");
        }
    }

    这样就配置好了定时任务,具体的启动代码就不给出来,主要是提供一个设置Quartz调度任务的思想与方向。

    记录关于Quartz定时调度任务的知识点,知识点主要分为两个部分,第一个部分介绍Quartz,第二部分使用Quartz+Spring来配置使用Quartz的实际操作。

    (一)Quartz知识点

    Quartz是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定的时间到达时,负责执行(或者通知)其他组件的系统。 

    一句话概括:Quartz框架的核心就是调度器;

     

    Quartz 具有以下特点:强大的调度功能,灵活的应用方式,分布式和集群能力。

    我认为企业级应用Quartz框架的原因应该主要是它的分布式和集群能力,尤其是配合Zookeeper进行开发。

     

    quartz调度核心元素

    1. Scheduler:任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。
    2. Trigger:触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多。
    3. JobDetail:用来描述Job实现类及其它相关的静态信息,如Job名字、关联监听器等信息。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean两种实现,如果任务调度只需要执行某个类的某个方法,就可以通过MethodInvokingJobDetailFactoryBean来调用。
    4. Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务。

     

     

    (二)Quartz在Spring中的实际应用

    下面给出我配置的一个定时任务,而该任务的实现可以根据具体的场景进行实现。

    首先配置Spring:

    1.  
      <?xml version="1.0" encoding="UTF-8"?>
    2.  
      <beans xmlns="http://www.springframework.org/schema/beans"
    3.  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.  
      xsi:schemaLocation="http://www.springframework.org/schema/beans
    5.  
      http://www.springframework.org/schema/beans/spring-beans.xsd">
    6.  
       
    7.  
      <!--新添加的定时任务QuartzTestJob-->
    8.  
      <bean id="quartzTestJob"
    9.  
      class="cn.mwee.service.shop.quartz.QuartzTestJob" />
    10.  
       
    11.  
      <bean id="quartzTestTask"
    12.  
      class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    13.  
      <property name="targetObject" ref="quartzTestJob"/>
    14.  
      <property name="targetMethod" value="execute"/>
    15.  
      <property name="concurrent" value="false"/>
    16.  
      </bean>
    17.  
       
    18.  
      <bean id="quartzTestTrigger"
    19.  
      class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    20.  
      <property name="jobDetail" ref="quartzTestTask"/>
    21.  
      <!--cron表达式-->
    22.  
      <property name="cronExpression" value="*/10 * * * * ?"/>
    23.  
      </bean>
    24.  
       
    25.  
       
    26.  
      <!-- 总管理类 -->
    27.  
      <bean id="startQuartz"
    28.  
      class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    29.  
      <property name="autoStartup" value="false"/>
    30.  
      <property name="triggers">
    31.  
      <list>
    32.  
      <!--<ref bean="koubeiCueWordTrigger"/>-->
    33.  
      <ref bean="quartzTestTrigger"/>
    34.  
      </list>
    35.  
      </property>
    36.  
      </bean>
    37.  
      </beans>

    具体实现的任务类QuartzTestJob:

    1.  
      public class QuartzTestJob extends AbstractBaseJob{
    2.  
      @Override
    3.  
      public void work() {
    4.  
      logger.info("QuartzTestJob START");
    5.  
       
    6.  
      logger.info("QuartzTestJob OVER");
    7.  
      }
    8.  
      }

    这样就配置好了定时任务,具体的启动代码就不给出来,主要是提供一个设置Quartz调度任务的思想与方向。

    说明:所有内容仅做学习记录
  • 相关阅读:
    IE6/IE7浏览器中"float: right"自动换行的解决方法
    IE6/IE7浏览器不支持display: inline-block;的解决方法
    如何解决两个li之间的缝隙
    input、button、a标签 等定义的按钮尺寸的兼容性问题
    在一个页面重复使用一个js函数的方法
    关于让input=text,checkbox居中的解决方法
    遮盖层实现(jQuery+css+html)
    button,input type=button按钮在IE和w3c,firefox浏览器区别
    前端-选项卡(菜单栏)
    形成人、机器、过程和数据的互联互通
  • 原文地址:https://www.cnblogs.com/jayinnn/p/9560972.html
Copyright © 2011-2022 走看看