分类
实现的技术
Java自带的java.util.Timer类。可以按照某一个频度执行,但不能在指定时间运行。
spring自带的task: 轻量级的quartz
Quartz: 相对task强大一些,对于服务器集群环境,可以保证仅一台服务器执行定时任务
作业类的继承方式
作业类继承指定的作业类基类: quartz中继
org.springframework.scheduling.quartz.QuartzJobBean;
Timer中继承java.util.TimerTask作业类是普通的java类,不需要继承自任何基类
调度时间来讲
每隔指定时间则触发一次,quartz中的
org.springframework.scheduling.quartz.SimpleTriggerBean每到指定时间则触发一次,quartz中的
org.springframework.scheduling.quartz.CronTriggerBean
使用说明
下面就Quartz和Spring task来详细讲解一下使用方式,都是介绍作业类是普通的java类的实现方式。
Spring Task
配置如下即可
|
initial-delay: 表示第一次运行前需要延迟的时间,单位是毫秒
fixed-delay: 表示从上一个任务完成到下一个任务开始的间隔, 单位是毫秒
fixed-rate: 表示从上一个任务开始到下一个任务开始的间隔, 单位是毫秒(如果某次任务开始时上次任务还没有结束,那么在上次任务执行完成时,当前任务会立即执行)
Quartz
配置调度工厂
|
配置触发器
|
小结
根据项目的需要选择不同的方案,个人一般建议使用Spring Task实现定时任务,如果有集群的需要,某些定时任务可以仅配置一台机器执行。
如果使用Quartz,采用数据库存储定时任务等信息的话,那么你的数据将需要导入Quartz相关的一些表,显得数据表比较杂乱,不建议使用。可以采用RAMJobStore的方式。