定时调度框架Quartz随笔
最近项目中的定时批处理用到了quartz定时任务,在此记录下quartz的配置吧,一个小demo仅供参考,也方便自己今后复习!
下面直接来步骤吧!
一、首先,要搭起能让quartz正常运行的环境,至少需要三个jar包,quartz.jar,jta.jar、spring-context-support.jar(注意Spring 3.0版本中内置的Quartz版本是<2.0的,在使用最新的Quartz包(>2.0)之后,接口不兼容,报
Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class 错误
。所以使用spring-context-support.jar-3.0.x时需要使用quartz-1.x。
二、jar包引入完毕,写好自己需要执行的任务类,在此给出个简单的demo:
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean; public class TestQuartz extends QuartzJobBean{ public void test(){
System.out.println("========="+System.currentTimeMillis()+"=========");
} @Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
test();
}
}
注:任务类一定要继承QuartzJobBean类,实现其中的executeInternal方法。
三、进行xml的配置。xml配置时其任务bean的配置可用JobDetailBean,也可用MethodInvokingJobDetailFactoryBean。
JobDetailBean的配置方法如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<!-- 任务 -->
<bean name="reportTask" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="TestQuartz" />
</bean> <!-- 触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 指向我们的任务 -->
<property name="jobDetail" ref="reportTask" />
<!-- 每30s触发一次 -->
<property name="cronExpression" value="30 * * * * ?" />
</bean> <!-- 调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 触发器列表 -->
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>
对于这个配置,个人的理解是调度器根据配置找到需要执行的触发器,触发器根据配置找到需要执行的任务,任务根据配置找到真正的类和方法去执行。
此配置,最终会执行TestQuartz的executeInternal方法,也就是重写的父类方法。
MethodInvokingJobDetailFactoryBean的配置方法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd"> <beans>
<!-- 任务的具体执行类bean -->
<bean id="testBean" class="TestQuartz" />
<!-- 任务 -->
<bean name="reportTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 指定执行任务的对象 -->
<property name="targetObject">
<ref bean="testBean"/>
</property>
<!-- 指定对象执行的方法 -->
<property name="targetMethod">
<value>test</value>
</property>
</bean> <!-- 触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 指向我们的任务 -->
<property name="jobDetail" ref="reportTask" />
<!-- 每30s触发一次 -->
<property name="cronExpression" value="30 * * * * ?" />
</bean>
<!-- 调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 触发器列表 -->
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>
可以看到,此配置与JobDetailBean配置的区别主要是任务bean的配置。讲到这里那就说说两者的区别吧。
JobDetailBean配置在任务bean中直接指定类(指定方法还不清楚属哪个属性,网上找了几个试了都不行,干脆在这不写,免得误人子弟,哈哈),最终任务执行重写了父类的方法即executeInternal(),而MethodInvokingJobDetailFactoryBean的配置通过targetObject指定任务类对应的bean,这个bean配置了class,也就是最终的指定类,并且可以通过targetMethod指定执行任务类中的哪个方法,指定了之后便不再去找executeInternal()执行。
四、至于调度器的配置,应该不用多说,看一眼就知道了,list中指定触发器就行。触发器的配置,jobDetai指定任务bean,cronExpression是时间的配置表达式,指定任务执行时间。总共7位数字,从左至右分别为秒、分、时、日、月、天(一周中的天数,如周一)、年。写的时候至少写6位,最后的年份可不写。关于这个表达式目前还没学透,只是大致了解,用到的话我也是去百度的,就不在此班门弄斧了!
至此,一个定时调度任务的所有需要做的任务就完成了,启动tomcat就能按照你的要求进行工作了。以下是demo中第二种配置的工作结果:
好了,今天到此结束!
定时调度框架Quartz随笔的更多相关文章
- Quartz定时调度框架
Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...
- [源码分析] 定时任务调度框架 Quartz 之 故障切换
[源码分析] 定时任务调度框架 Quartz 之 故障切换 目录 [源码分析] 定时任务调度框架 Quartz 之 故障切换 0x00 摘要 0x01 基础概念 1.1 分布式 1.1.1 功能方面 ...
- 开源调度框架Quartz最佳实践
开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...
- 定时调度之Quartz
工作中我们经常碰到定时或者固定时间点去做一些事情,然后每天到时间点就会去做这样的事情,如果理解这样的场景,我们就要引入今天我们的主角Quartz,其实这个跟数据库的作业类似,但是不仅仅局限于数据库. ...
- 定时调度框架:Quartz.net
Quartz.net相关概念 经常出现场景:定时轮询数据库同步,定时邮件通知,定时处理数据等 Scheduler (计划者或调度器) Job (工作对象):将要定时执行的任务代码写到实现Ijob接口的 ...
- 一文揭秘定时任务调度框架quartz
之前写过quartz或者引用过quartz的一些文章,有很多人给我发消息问quartz的相关问题, quartz 报错:java.lang.classNotFoundException quartz源 ...
- 定时调度任务quartz
依赖 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> < ...
- java 调度框架quartz
核心代码如下: public class SchedulerTest { public static void main(String[] args) { //创建schedulerFactory类 ...
- Java调度框架Quartz简单示例
Quartz的大名如雷贯耳,这里就不赘述,而且本文也不作为深入探讨,只是看完Quartz的官方文档后,下个简单示例,至少证明曾经花了点时间学习过,以备不时之需. Quartz使用了SLF4J,所以至少 ...
随机推荐
- listener.ora增加监听端口
一个简单的listener.ora # listener.ora Network Configuration File: d:\app\zyd\product\11.2.0\dbhome_1\netw ...
- Spark中文指南(入门篇)-Spark编程模型(一)
前言 本章将对Spark做一个简单的介绍,更多教程请参考:Spark教程 本章知识点概括 Apache Spark简介 Spark的四种运行模式 Spark基于Standlone的运行流程 Spark ...
- swift中editingStyleForRowAtIndexPath的写法
效果图: 首先要实现这句tableView.setEditing(true, animated: true)才能弹出左侧的小圆圈 然而在oc中tableview删除的写法百度一下很常见但是swift中 ...
- 马哥教育视频笔记:01(Linux常用命令)
1.查看缓存中使用的命令和命令路径 [wskwskwsk@localhost /]$ hash 命中 命令 /usr/bin/printenv /usr/bin/ls /usr/bin/clear 2 ...
- [问题2015S13] 复旦高等代数 II(14级)每周一题(第十四教学周)
[问题2015S13] 设 \(A=(a_{ij})\) 为 \(n\) 阶实矩阵, 定义函数 \[f(A)=\sum_{i,j=1}^na_{ij}^2.\] 设 \(P\) 为 \(n\) 阶非 ...
- Bootstrap_分页
一.带页码的分页导航 <ul class="pagination"> <li><a href="#">«</a> ...
- 分享 - 最初的JDBC操作步骤
/* * 1. 注册 */ // 装载注册 SQLServer Driver Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDri ...
- GZFramwork快速开发框架演练之会员系统(三)添加会员等级管理
1.设计会员等级表结构 创建语句: from sysobjects where id = object_id('tb_MembersLevel') and type = 'U') drop table ...
- IIS 7中 ISAPI 错误解决
在本地IIS种发布了一个测试网站,浏览的时候提示 404 错误,无法显示页面,具体错误如下: 解决办法如下: 选择IIS根目录,在右边的功能视图中选择 “ISAPI 和 CGI限制”,双击打开, 把相 ...
- Scrum Meeting 6-20151208
任务安排 姓名 今日任务 明日任务 困难 董元财 修复app特定情况下崩溃 服务器购买记录接口 无 胡亚坤 聊天界面优化 发布记录和购买记录 无 刘猛 请假(生病了) 完成Scrum Meeting ...