最近项目中的定时批处理用到了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中第二种配置的工作结果:

好了,今天到此结束!

最新文章

  1. Springlake-01 介绍&amp;功能&amp;安装
  2. httpModules与httpHandlers之httpModules(转载)
  3. Exercises - Kangaroo
  4. Swift-1-基本概念
  5. vector 内部方法大全 学习(初学者的参考资料)
  6. RocketMQ入门(3)拉取消息
  7. sharepoint 2010 如何创建文档库内容类型content type
  8. 计算机视觉的matlab工具箱及MVG等
  9. Katana 还是Owin ? 本地自承载
  10. 错误&nbsp;4&nbsp;自定义工具错误:&nbsp;无法生成服务引用“DepartMentService”的代码。请检查其他错
  11. C#邮件发送开发经本人测试通过
  12. Android Studio升级到3.4遇到的问题总结
  13. Hive的命名空间
  14. 【原创】qlogic网卡软中断不均衡问题分析
  15. 记录自己的 django管理 开发环境 和 生产环境 配置过程
  16. 章节七、3-ArrayList和LinkedList对比
  17. VB|xp风格:终于解决了“图片优化软件”在部分xp系统上无法启动的问题。
  18. Join The Future (剪枝 + 状态压缩)
  19. 使用xcode 7 开发cocos2dx问题
  20. C#实现新建文件并写入内容

热门文章

  1. WebService处理大数据量数据
  2. zigbee学习之路(四):按键控制(中断方式)
  3. RebotFrameWork的分层思想
  4. HDU 4944 FSF’s game 一道好题
  5. javascript 设计模式1----单例模式
  6. Lucas定理
  7. hdu3652 B-number
  8. UiAutomator环境搭建及详细操作
  9. PHP 小方法之 算生日
  10. Postman 安装及使用入门教程