java Quartz定时器任务与Spring task定时的几种实现
基于java 的定时任务实现,html
Quartz 时间详细配置 请查阅 http://www.cnblogs.com/sihuanian/p/5010872.htmljava
Quartz 时间简单介绍 请查阅最底部spring
spring框架来介绍。tomcat
一.分类
-
从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):
- Java自带的java.util.Timer类,这个类容许你调度一个java.util.TimerTask任务。使用这种方式可让你的程序按照某一个频度执行,但不能在指定时间运行。通常用的较少,这篇文章将不作详细介绍。
- 使用Quartz,这是一个功能比较强大的的调度器,可让你的程序在指定时间执行,也能够按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
- Spring3.0之后自带的task,能够将它当作一个轻量级的Quartz,并且使用起来比Quartz简单许多,稍后会介绍。
-
从做业类的继承方式来说,能够分为两类:
- 做业类须要继承自特定的做业类基类,如Quartz中须要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中须要继承自java.util.TimerTask。
- 做业类即普通的java类,不须要继承自任何基类。
注:我的推荐使用第二种方式,由于这样因此的类都是普通类,不须要事先区别对待。并发
-
从任务调度的触发时机来分,这里主要是针对做业使用的触发器,主要有如下两种:
- 每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
- 每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean
注:并不是每种任务均可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task均可以支持这两种触发条件。框架
二.用法说明
详细介绍每种任务调度工具的使用方式,包括Quartz和spring task两种。ide
Quartz
第一种,做业类继承自特定的基类:org.springframework.scheduling.quartz.QuartzJobBean。
第一步:定义做业类工具
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class Job1 extends QuartzJobBean { private int timeout; private static int i = 0; //调度工厂实例化后,通过timeout时间开始执行调度 public void setTimeout(int timeout) { this.timeout = timeout; } /** * 要调度的具体任务 */ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("定时任务执行中…"); } }
第二步:spring配置文件中配置做业类JobDetailBeanpost
<bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.gy.Job1" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即咱们在java代码中定义的任务类,jobDataAsMap属性即该任务类中须要注入的属性值。this
第三步:配置做业调度的触发方式(触发器)
Quartz的做业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照必定频度调用任务,如每隔30分钟运行一次。
配置方式以下:
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job1" /> <property name="startDelay" value="0" /><!-- 调度工厂实例化后,通过0秒开始执行调度 --> <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 --> </bean>
第二种CronTriggerBean,支持到指定时间运行一次,如天天12:00运行一次等。
配置方式以下:
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job1" /> <!—天天12:00运行一次 --> <property name="cronExpression" value="0 0 12 * * ?" /> </bean>
关于cronExpression表达式的语法参见附录。
第四步:配置调度工厂