【淘淘】Spring整合Quartz框架
我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈。这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。当时,我做的.net的项目,我们用的一个折中办法,就是定时把所有需要的工作列表抽出来放到一个调度库里面,然后通过多线程从任务调度表里面去取任务,进行工作。这里关键就是定时。我们的定时是怎么实现的呢?
说简单一点,我们当时是把所有报表对应的信息全部都放到一张信息表里面,里面包括报表名称,要求生成报表的时间、跨度和时间间隔,然后利用多线程实现延时,每过1分钟调用一下比对时间跟缓存里面的任务列表做核对,该工作的工作。也算是比较投机取巧吧,反正是实现了。而接触了quartz之后,我才知道这个功能实现的是多么的简单。结合我们的spring框架,说一下用spring来整合quartz来实现定时任务的过程。
一、增加所依赖的JAR包
1、增加Spring的Maven依赖
- <span style="font-size:18px;"><dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>3.0.5.RELEASE</version>
- </dependency></span>
2、增加Quartz的Maven依赖
- <span style="font-size:18px;"><dependency>
- <groupId>org.quartz-scheduler</groupId>
- <artifactId>quartz</artifactId>
- <version>1.8.4</version>
- </dependency></span>
二、增加定时业务逻辑类
- <span style="font-size:18px;">public class ExpireJobTask {
- private static final Logger logger = LoggerFactory.getLogger(ExpireJobTask.class);
- /**
- *
- * 业务逻辑处理
- */
- public void doTesk() {
- // 执行业务逻辑
- // ........
- }
- }</span>
ExpireJobTask业务逻辑类与一般普通的类没有任务区别,它定义的doBiz方法即为调度业务方法。
三、增加Spring配置
1、增加一个线程池
- <<span style="font-size:18px;">!-- 线程执行器配置,用于任务注册 -->
- <bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
- <property name="corePoolSize" value="10"/>
- <property name="maxPoolSize" value="100"/>
- <property name="queueCapacity" value="500"/>
- </bean></span>
2、定义业务逻辑处理类
- <span style="font-size:18px;"><!-- 业务对象 -->
- <bean id="bizObject" class="com.aboy.potak.common.toolkit.scheduling.ExpireJobTask"/>
- </span>
3、增加调度业务逻辑
- <span style="font-size:18px;"><!-- 调度业务 -->
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="bizObject"/>
- <property name="targetMethod" value="doTesk"/>
- </bean></span>
上面的配置中,我们以bizObject.doBiz方法为将要调度的业务执行逻辑。
4、增加调度触发器
- <span style="font-size:18px;"><bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="jobDetail"/>
- <property name="cronExpression" value="10 0/1 * * * ?"/>
- </bean></span>
Cron表达式“10 */1 * * * ?”意为:从第10秒开始,每1分钟执行一次。
- <span style="font-size:18px;"><bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
- <property name="jobDetail" ref="jobDetail"/>
- <property name="startDelay" value="10000"/>
- <property name="repeatInterval" value="60000"/>
- </bean></span>
该调度表示,延迟10秒启动,然后每隔1分钟执行一次。
5、增加调度
- <span style="font-size:18px;"><!-- 设置调度 -->
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="cronTrigger"/>
- </list>
- </property>
- <property name="taskExecutor" ref="executor"/>
- </bean></span>
triggers属性中,我们可以增加多个触发器。到此,Spring已经与Quartz完美的结合了,我们接下来的工作就是启动系统,开始调度了。
而除此之外,我们还可以使用Java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。相对来说是比较繁琐吧。所以使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成。
总结:
合适的就是最好的,除了以上说过的的之外,当当开源的elastic-job分布式作业调度框架也是相当出名的,也是相当的好用。据说我媳妇儿工作的广州汽车那个公司的定时任务就是应用的当当的那套框架,有时间欢迎大家跟我一块来接触一下。
【淘淘】Spring整合Quartz框架的更多相关文章
- spring整合quartz框架
spring整合quartz: 网上也有很多教程,好多都是基于配置方式,我们使用当然怎么简单就怎么用,所以这里介绍基于注解方式整合quartz.前提:你需要有一个能运行的web项目. 1.引依赖: & ...
- spring整合Quartz框架过程,大家可以参考下
这篇文章详细介绍了spring集成quartz框架流程,通过示例代码进行了详细说明,对学习或任务有参考学习价值,并可供需要的朋友参考. 1.quartz框架简介(m.0831jl.com) quart ...
- Spring 整合 Quartz框架(定时任务)
Maven 无法下载 Quartz 依赖,去官网下载 http://www.quartz-scheduler.org/downloads/ Quartz 官方手册:https://www.w3csch ...
- Spring整合quartz框架实现任务定时调度
1. 首先需要引入需要的jar包,如上图所示. 2. 编写需要定时调度的测试类: package com.jp.task; import java.util.Date; public class T ...
- spring整合quartz时间任务调度框架
spring整合quartz框架 1.创建maven工程 2.导入jar包(pom.xml) <dependencies> <dependency> <groupId&g ...
- 使用Spring整合Quartz轻松完成定时任务
一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...
- Spring整合Quartz
目录[-] 一.Spring创建JobDetail的两种方式 二.整合方式一示例步骤 1.将spring核心jar包.quartz.jar和Spring-context-support.jar导入类路 ...
- Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)
Spring整合Quartz定时任务 在集群.分布式系统中的应用(Mysql数据库环境) 转载:http://www.cnblogs.com/jiafuwei/p/6145280.html 单个Q ...
- 初识quartz 并分析 项目中spring整合quartz的配置【原创+转载】
初识quartz 并分析 项目中spring整合quartz的配置[原创+转载]2018年01月29日 12:08:07 守望dfdfdf 阅读数:114 标签: quartz 更多个人分类: 工具 ...
随机推荐
- U盘因为装linux系统变小了
U盘在Windows下被UltraISO等软件制作成Linux启动盘后会自动被格式化成FAT格式,导致容量变小. 用DiskGenius去修复 http://www.jb51.net/softs/75 ...
- python作用域和多继承
python作用域 python无块级作用域 看c语言代码: #include<stdio.h> int main() { > ) { ; } printf("i = %d ...
- sokect编程进阶
IO模型 什么是IO? IO:input和output的缩写,即输入/输出端口.每个设备都会有一个专用的I/O地址,用来处理自己的输入输出信息 同步.异步.阻塞.非阻塞 同步和异步的概念描述的是用户线 ...
- 错误信息:内存位置访问无效。 (Exception from HRESULT: 0x800703E6)
错误提示: 错误信息:内存位置访问无效. (Exception from HRESULT: 0x800703E6) 异常类型:System.BadImageFormatException 堆栈跟踪: ...
- NOIp2016 十连测 round1
Claris大爷出的一套模拟题.问别人要到了一份题,加深了自己NOIp要滚粗的感觉. Matser zzDP题,我只能说我第一遍写的时候还写崩了QAQ. //master //by Cydiater ...
- Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...
- java 追加文件
FileWriter writer = null; String fileName="d://my.txt"; String line="要追加的内容"; tr ...
- mysql优化记录
老板反应项目的反应越来越慢,叫优化一下,顺便学习总结一下mysql优化. 不同引擎的优化,myisam读的效果好,写的效率差,使用场景 非事务型应用只读类应用空间类应用 Innodb的特性,innod ...
- [NHibernate]并发控制
目录 写在前面 文档与系列文章 并发控制 乐观并发控制(Optimistic Concurrency) 一个例子 悲观并发控制(Pessimistic Concurrency) 总结 写在前面 上篇文 ...
- 跟随 Web 标准探究DOM -- Node 与 Element 的遍历
写在前面 这篇没有什么 WebKit 代码的分析,因为……没啥好分析的,在实现里无非就是树的(先序DFS)遍历而已,囧哈哈哈……在WebCore/dom/Node.h , WebCore/dom/Co ...