Spring 定时任务的几种实现
近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日
志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用 spring 框架,所以
我都将结合
spring 框架来介绍。
一.分类
从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):
1. Java 自带的 java.util.Timer 类,这个类允许你调度一个 java.util.TimerTask 任务。使
用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的
较少,这篇文章将不做详细介绍。
2. 使用 Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,
也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
3. Spring3.0 以后自带的 task,可以将它看成一个轻量级的 Quartz,而且使用起来比
Quartz 简单许多,稍后会介绍。
从作业类的继承方式来讲,可以分为两类:
1. 作 业 类 需 要 继 承 自 特 定 的 作 业 类 基 类 , 如 Quartz 中 需 要 继 承 自
org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer 中需要继承
自 java.util.TimerTask。
2. 作业类即普通的 java 类,不需要继承自任何基类。
注:个人推荐使用第二种方式,因为这样所以的类都是普通类,不需要事先区别对待。
"
从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:
1. 每 隔 指 定 时 间 则 触 发 一 次 , 在 Quartz 中 对 应 的 触 发 器 为 :
org.springframework.scheduling.quartz.SimpleTriggerBean
2. 每 到 指 定 时 间 则 触 发 一 次 , 在 Quartz 中 对 应 的 调 度 器 为 :
org.springframework.scheduling.quartz.CronTriggerBean
注:并非每种任务都可以使用这两种触发器,如 java.util.TimerTask 任务就只能使用第一
种。Quartz 和 spring task 都可以支持这两种触发条件。
"