【淘淘】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 更多个人分类: 工具 ...
随机推荐
- ResourceManager里面Trackingui需要手动该ip
C:\Windows\System32\drivers\etc 这个路径下配置了ip和主机名,不过是大小写,ping不同,不论ping大小写还是全部小写都不行,我看地址栏是小写所以想着把hosts里C ...
- SAX与DOM
http://www.cnblogs.com/zhulin/archive/2012/05/03/2480962.html 在解析xml时(如浏览器解析html标签),主要存在两种方式:SAX模式和D ...
- Python Day9
Paramiko模块 paramiko模块基于SSH用于连接远程服务器并执行相关操作 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHCl ...
- 11月6日下午PHP注册审核(审核状态控制登录、可以更改审核状态)
1.创建登录界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- git版本控制管理实践-4
vcs: version control system 版本控制系统 local vcs, 集中式版本控制系统: centralized vcs; 分布式vcs: distributed vcs Lo ...
- R语言-处理异常值或报错的三个示例
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...
- NSLog(@"%@",类对象); 默认输出类名
NSLog()函数输出Objective-c对象时,输出的是该对象的description方法的返回值.也就是说,以下两行代码作用完全一样(假设p是指向任何对象的指针变量). NSLog(@" ...
- PHP同时上传“多个”文件示例,并格式化$_FILES数组信息
方法1: 在html表单,放置多个文件选择框, 使用数组名作为组件的名字,如下: <form action="upload.php" method="post&qu ...
- Java NIO工作原理
数据通信流程: 通过selector.select()阻塞方法获取到感兴趣事件的key,根据key定位到channel,通过channel的读写操作进行数据通信.channel的read或者write ...
- phpcms手机门户相关
相关标签 {$WAP['sitename']}标题 {list_url(3)} 调取栏目链接 {template "wap","header"}{templat ...