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调度任务的思想与方向。

    说明:所有内容仅做学习记录
  • 相关阅读:
    ASP.NET MVC案例——————拦截器
    Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限
    Windows Azure Storage (20) 使用Azure File实现共享文件夹
    Windows Azure HandBook (5) Azure混合云解决方案
    Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On
    Azure PowerShell (9) 使用PowerShell导出订阅下所有的Azure VM的Public IP和Private IP
    Windows Azure Service Bus (5) 主题(Topic) 使用VS2013开发Service Bus Topic
    Azure China (9) 在Azure China配置CDN服务
    Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob
    Windows Azure HandBook (4) 分析Windows Azure如何处理Session
  • 原文地址:https://www.cnblogs.com/jayinnn/p/9560972.html
Copyright © 2011-2022 走看看