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

Quartz理解与实现的更多相关文章

  1. 关于sping quartz定时执行理解与思考

    转载请注明原创出处,谢谢! 一直以为自己理解spring quartz,忽然最近几天发现自己理解的不对,在4月18号的时候,我执行了一个spring quartz的计划如下: 1 0 0 */3 * ...

  2. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  3. (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail

    http://blog.csdn.net/zixiao217/article/details/53053598 首先给一个简明扼要的理解: Scheduler 调度程序-任务执行计划表,只有安排进执行 ...

  4. quartz源码分析之深刻理解job,sheduler,calendar,trigger及listener之间的关系

    org.quartz包 包org.quartz是Quartz的主包,包含了客户端接口. 其中接口有: Calendar接口: 定义了一个关联Trigger可能(或者不可能)触发的时间空间.它没有定义触 ...

  5. Quartz的misfire理解

    misfire用于Trigger触发时,线程池中没有可用的线程或者调度器关闭了,此时这个Trigger变为misfire.当下次调度器启动或者有可以线程时,会检查处于misfire状态的Trigger ...

  6. JVM的深入理解:由一次Quartz的定时任务引发的“A cannot cast to A”的问题

    由Quartz框架引发的“A cannot cast to A”的问题 起因与问题描述 向新开的项目中添加定时任务,部署集群,添加了热加载(springboot-dev-tools),发现在转型时候出 ...

  7. Spring+quartz cron表达式(cron手册官方)完美理解

    ------------------------------------- 15 17/1 14/3 * * ? 从每小时的17分15秒开始 每分钟的15秒执行一次14:17:15 ...14:59: ...

  8. Quartz.net开源作业调度框架使用详解

    前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...

  9. quartz.net 时间表达式----- Cron表达式详解

    序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...

随机推荐

  1. POJ 2226 Muddy Fields(最小点覆盖)题解

    题意:一片r*c的地,有些地方是泥地,需要铺地板.这些地板宽1,长无限,但只能铺在泥地上不能压到其他地方,问你铺满所有泥地最少几块 思路:我们把一行中连续的泥地看成整体,并把所有横的整体里的点编成一个 ...

  2. HihoCoder 1634 Puzzle Game(最大子矩阵和)题解

    题意:给一个n*m的矩阵,你只能选择一个格子把这个格子的数换成p(也可以一个都不换),问最大子矩阵和最小可能是多少? 思路: 思路就是上面这个思路,这里简单讲一下怎么n^3求最大子矩阵和:枚举两行(或 ...

  3. SSM项目 单元测试中 注入bean 空指针异常

    ##特别 由于准备春招,所以希望各位看客方便的话,能去github上面帮我Star一下项目https://github.com/Draymonders/Campus-Shop java.lang.Nu ...

  4. 不能安装64位office提示已安装32位的

    安装64位office办公软件的时候提示已经安装32位的office办公软件所以无法继续安装,但实际上之前安装的32位的office办公软件已经卸载了.问题现象截图如下: 从问题描述中,我们其实已经能 ...

  5. SP3946 MKTHNUM - K-th Number(整体二分)

    思路 整体二分的板子题,没什么思路好说 代码 #include <cstdio> #include <algorithm> #include <cstring> u ...

  6. C盘清理

    魔方清理大师 “清理大师”->清理界面 一键清理=>开始扫描=>立刻清理 注册表清理=>开始扫描=>立刻清理 深度清理=>开始扫描=>立刻清理 C:\User ...

  7. 利用JavaScriptSOAPClient直接调用webService --完整的前后台配置与调用示例

    JavaScriptSoapClient下载地址:https://archive.codeplex.com/?p=javascriptsoapclient JavaScriptSoapClient的D ...

  8. RN原生调用一:安卓Toast

    首先安卓原生方法:Toast.makeText(getApplicationContext(), "默认的Toast", Toast.LENGTH_SHORT); 在RN中js如何 ...

  9. springboot 启动报错 java.lang.IllegalStateException: Failed to introspect annotated methods on class org

    . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ...

  10. Jmeter干货 不常用却极其有用的几个地方

    1. Jmeter测试计划下Run Thread Groups consecutively 表示序列化执行测试计划下所有线程组中的各个请求 如下图配置,新建的测试计划中,不默认勾选此项, 而享用Jme ...