我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈。这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。当时,我做的.net的项目,我们用的一个折中办法,就是定时把所有需要的工作列表抽出来放到一个调度库里面,然后通过多线程从任务调度表里面去取任务,进行工作。这里关键就是定时。我们的定时是怎么实现的呢?

说简单一点,我们当时是把所有报表对应的信息全部都放到一张信息表里面,里面包括报表名称,要求生成报表的时间、跨度和时间间隔,然后利用多线程实现延时,每过1分钟调用一下比对时间跟缓存里面的任务列表做核对,该工作的工作。也算是比较投机取巧吧,反正是实现了。而接触了quartz之后,我才知道这个功能实现的是多么的简单。结合我们的spring框架,说一下用spring来整合quartz来实现定时任务的过程。

一、增加所依赖的JAR包

1、增加Spring的Maven依赖

  1. <span style="font-size:18px;"><dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-webmvc</artifactId>
  4. <version>3.0.5.RELEASE</version>
  5. </dependency></span>

2、增加Quartz的Maven依赖

  1. <span style="font-size:18px;"><dependency>
  2. <groupId>org.quartz-scheduler</groupId>
  3. <artifactId>quartz</artifactId>
  4. <version>1.8.4</version>
  5. </dependency></span>

二、增加定时业务逻辑类

  1. <span style="font-size:18px;">public class ExpireJobTask {
  2. private static final Logger logger = LoggerFactory.getLogger(ExpireJobTask.class);
  3. /**
  4. *
  5. * 业务逻辑处理
  6. */
  7. public void doTesk() {
  8. // 执行业务逻辑
  9. // ........
  10. }
  11. }</span>

ExpireJobTask业务逻辑类与一般普通的类没有任务区别,它定义的doBiz方法即为调度业务方法。

三、增加Spring配置

1、增加一个线程池

  1. <<span style="font-size:18px;">!-- 线程执行器配置,用于任务注册 -->
  2. <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  3. <property name="corePoolSize" value="10"/>
  4. <property name="maxPoolSize" value="100"/>
  5. <property name="queueCapacity" value="500"/>
  6. </bean></span>

2、定义业务逻辑处理类

  1. <span style="font-size:18px;"><!-- 业务对象 -->
  2. <bean id="bizObject" class="com.aboy.potak.common.toolkit.scheduling.ExpireJobTask"/>
  3. </span>

3、增加调度业务逻辑

  1. <span style="font-size:18px;"><!-- 调度业务 -->
  2. <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  3. <property name="targetObject" ref="bizObject"/>
  4. <property name="targetMethod" value="doTesk"/>
  5. </bean></span>

上面的配置中,我们以bizObject.doBiz方法为将要调度的业务执行逻辑。

4、增加调度触发器

  1. <span style="font-size:18px;"><bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  2. <property name="jobDetail" ref="jobDetail"/>
  3. <property name="cronExpression" value="10 0/1 * * * ?"/>
  4. </bean></span>

Cron表达式“10 */1 * * * ?”意为:从第10秒开始,每1分钟执行一次。

  1. <span style="font-size:18px;"><bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  2. <property name="jobDetail" ref="jobDetail"/>
  3. <property name="startDelay" value="10000"/>
  4. <property name="repeatInterval" value="60000"/>
  5. </bean></span>

该调度表示,延迟10秒启动,然后每隔1分钟执行一次。

5、增加调度

  1. <span style="font-size:18px;"><!-- 设置调度 -->
  2. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  3. <property name="triggers">
  4. <list>
  5. <ref bean="cronTrigger"/>
  6. </list>
  7. </property>
  8. <property name="taskExecutor" ref="executor"/>
  9. </bean></span>

triggers属性中,我们可以增加多个触发器。到此,Spring已经与Quartz完美的结合了,我们接下来的工作就是启动系统,开始调度了。

而除此之外,我们还可以使用Java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。相对来说是比较繁琐吧。所以使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成。

总结:

合适的就是最好的,除了以上说过的的之外,当当开源的elastic-job分布式作业调度框架也是相当出名的,也是相当的好用。据说我媳妇儿工作的广州汽车那个公司的定时任务就是应用的当当的那套框架,有时间欢迎大家跟我一块来接触一下。

【淘淘】Spring整合Quartz框架的更多相关文章

  1. spring整合quartz框架

    spring整合quartz: 网上也有很多教程,好多都是基于配置方式,我们使用当然怎么简单就怎么用,所以这里介绍基于注解方式整合quartz.前提:你需要有一个能运行的web项目. 1.引依赖: & ...

  2. spring整合Quartz框架过程,大家可以参考下

    这篇文章详细介绍了spring集成quartz框架流程,通过示例代码进行了详细说明,对学习或任务有参考学习价值,并可供需要的朋友参考. 1.quartz框架简介(m.0831jl.com) quart ...

  3. Spring 整合 Quartz框架(定时任务)

    Maven 无法下载 Quartz 依赖,去官网下载 http://www.quartz-scheduler.org/downloads/ Quartz 官方手册:https://www.w3csch ...

  4. Spring整合quartz框架实现任务定时调度

    1.  首先需要引入需要的jar包,如上图所示. 2. 编写需要定时调度的测试类: package com.jp.task; import java.util.Date; public class T ...

  5. spring整合quartz时间任务调度框架

    spring整合quartz框架 1.创建maven工程 2.导入jar包(pom.xml) <dependencies> <dependency> <groupId&g ...

  6. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  7. Spring整合Quartz

    目录[-] 一.Spring创建JobDetail的两种方式 二.整合方式一示例步骤 1.将spring核心jar包.quartz.jar和Spring-context-support.jar导入类路 ...

  8. Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)

    Spring整合Quartz定时任务 在集群.分布式系统中的应用(Mysql数据库环境)   转载:http://www.cnblogs.com/jiafuwei/p/6145280.html 单个Q ...

  9. 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】

    初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...

随机推荐

  1. css-display:none和visibility:hidden的不同

    摘自张鑫旭老师的博客-- display:none和visibility:hidden都能使元素隐藏,但是有明显区别,主要有以下三点: 空间占据 重排与重绘 株连性 1.空间占据. 使用display ...

  2. VMware安装ubuntu虚拟机

    创建虚拟机完成. 安装操作系统. 中文版界面: 中文版界面: 稍等在重启 重新启动虚拟机. 安装VMtools 双击该图标 安装完成,重新启动系统. 如果在安装的时候,主机名没有修改 看着太长 如何修 ...

  3. 彻底删除MySQL

    安装mysql数据库.最后一步APPLY SECURITY SETTINGS总是失败.感觉很郁闷.上网找了教程,有前四步,一一做了,发现还是不对.最近突然发现在环境变量那边的路径还没有卸载干净.可能我 ...

  4. node 常用命令

    nvm nvm list  列出安装的node npm install -g cnpm --registry=https://registry.npm.taobao.org  安装cnpm npm i ...

  5. [转]eclipse重新编译

    Eclipse打开时并不重新生成class文件,这就造成了eclipse找不到需要的class文件从而不能正常编译工程中的其他代码.此时就需要重新编译工程. 单击Project菜单,选择Clean菜单 ...

  6. <<< 三大框架简短介绍

    Struts 搞业务 Spring 主要是AOP(面向方面编程)和IOC(控制反转)它里面用到很多的设计模式Hibernate Orm映射工具 实现面向对象的方式操作数据库hibernate 封装了j ...

  7. ElasticSearch-5.0安装head插件

    环境 Windows10企业版X64 JDK-1.8 ElasticSearch-5.0.0 node-v4.5.0-x64.msi git客户端 步骤 安装node到D盘.如D:\nodejs. 把 ...

  8. [Head First设计模式]山西面馆中的设计模式——观察者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...

  9. VTK初学一,比较常见的错误1

      错误原因: 通常是在文件头部没有初始化 #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> V ...

  10. JSon 对象转字符的一些方法

    引用System.Web.Entity.dll public static string ToJSON(this object obj) { JavaScriptSerializer serializ ...