最近项目中的定时批处理用到了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随笔的更多相关文章

  1. Quartz定时调度框架

    Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...

  2. [源码分析] 定时任务调度框架 Quartz 之 故障切换

    [源码分析] 定时任务调度框架 Quartz 之 故障切换 目录 [源码分析] 定时任务调度框架 Quartz 之 故障切换 0x00 摘要 0x01 基础概念 1.1 分布式 1.1.1 功能方面 ...

  3. 开源调度框架Quartz最佳实践

    开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...

  4. 定时调度之Quartz

    工作中我们经常碰到定时或者固定时间点去做一些事情,然后每天到时间点就会去做这样的事情,如果理解这样的场景,我们就要引入今天我们的主角Quartz,其实这个跟数据库的作业类似,但是不仅仅局限于数据库. ...

  5. 定时调度框架:Quartz.net

    Quartz.net相关概念 经常出现场景:定时轮询数据库同步,定时邮件通知,定时处理数据等 Scheduler (计划者或调度器) Job (工作对象):将要定时执行的任务代码写到实现Ijob接口的 ...

  6. 一文揭秘定时任务调度框架quartz

    之前写过quartz或者引用过quartz的一些文章,有很多人给我发消息问quartz的相关问题, quartz 报错:java.lang.classNotFoundException quartz源 ...

  7. 定时调度任务quartz

    依赖 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> < ...

  8. java 调度框架quartz

    核心代码如下: public class SchedulerTest { public static void main(String[] args) { //创建schedulerFactory类 ...

  9. Java调度框架Quartz简单示例

    Quartz的大名如雷贯耳,这里就不赘述,而且本文也不作为深入探讨,只是看完Quartz的官方文档后,下个简单示例,至少证明曾经花了点时间学习过,以备不时之需. Quartz使用了SLF4J,所以至少 ...

随机推荐

  1. Python 时间和日期模块的常用例子

    获取当前时间的两种方法 import datetime,time now = time.strftime("%Y-%m-%d %H:%M:%S") print now now = ...

  2. Tomcat配置文件之servlet.xml中选项介绍

    Servlet.xml 分为以下元素: server, service, Connector ( 表示客户端和service之间的连接), Engine ( 表示指定service 中的请求处理机,接 ...

  3. JAVA基础知识之JDBC——使用ResultSetMetaData分析结果集

    通过ResultSetMetaData可以对ResultSet进行分析,获取ResultSet里包含了哪些数据列,以及每个列的数据类型. ResultSet中包含了一个getMetaData()方法, ...

  4. Tiles & SiteMesh

    Tiles & SiteMesh 这两天在给公司的新项目搭框架,在配tiles框架的时候发现一个小问题:    比如开发团队一共5人,每人10个页面,如果按照简单的tiles框架配置方法,每个 ...

  5. ASP.Net系列教程

    Getting Started with ASP.NET MVC This is a beginner tutorial that introduces the basics of ASP.NET M ...

  6. Writing Text Files On The Client in Oracle Forms 10g

    Below is the example to write file on client in Oracle Forms 10g with webutil library package.Note:  ...

  7. Moving From Top To Bottom in Detailed Block in Oracle Forms

    Suppose you want to scan a tabular grid block (loop through all records in detail block) from top to ...

  8. 20.fastDFS集群java代码测试

    1.工程结构   2.代码内容 FastdfsClientTest.java代码   package cn.itcast.fastdfs.cliennt; import java.io.File; i ...

  9. 调度系统任务创建---Git部署项目(一)

    有任务要上线时,需要将任务所在的项目代码从git上取出,在调度系统中编译打包,分发大任务执行服务器上. 具体的任务可以参考:http://192.168.53.100:8090/jenkins/vie ...

  10. (转载)U-boot启动完全分析

    1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø ...