我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈。这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。当时,我做的.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. Phylab2.0 文档汇总

    实验数据处理脚脚本 编写规范 调用框架以及测试文件规范 脚本调用约定 API文档 用户部分后端请求说明 文章评论区部分后端请求说明 测试报告 测试报告集

  2. Google Map API V3开发(2)

    Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...

  3. ecshop 后台分页功能

    Ecshop分页规则,分以下几个步骤 1.点击类别,获取第一页获取默认分类列表数据 2.点击“下一页”,采用ajax调取分页内容 实例分析(比如订单列表分页admin/order.php) 1.先写一 ...

  4. Asp.net MVC Comet推送

    一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...

  5. yaf将错误输出打印在页面上

    修改项目的配置文件 文件是conf/application.ini 添加两行代码 application.dispatcher.throwException = 1 ;开启/关闭自动异常捕获功能 ap ...

  6. MRDS学习三——机械车的改良(Activity的介绍)

    Activity:VPL中化繁为简的工具,可以使得真个VPL容易让人看懂,也能跟好的控制.它就很像把一堆比较复杂但相关的流程组合成一个自定义的Activity. 完成Activity的定义: 第一步: ...

  7. Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)

    PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式.PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...

  8. sql中case when语句的使用-来自网摘文章

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  9. linux内核调度算法(2)--CPU时间片如何分配 转!

    http://blog.csdn.net/russell_tao/article/details/7103012 内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有 ...

  10. webApi 数据绑定 获取

    直接上代码: <html> <head> <meta name="viewport" content="width=device-width ...