定时任务Java编写综述
目前我所用过的定时任务机制主要分三类:OS级的Linux crontab命令方式、Java语言级的JDK自带API、第三方API接口如Quartz(当然,其他MVC框架如Spring基于Quartz实现了更人性化的API接口,此类接口一并归入Quartz类族)。
这三种方式相比,OS级不用专门开启监听器,占用系统资源较少,是定时任务首选的实现方式;JDK自带API主要是Timer和TimeTask,这些API提供的接口功能简单,往往不能满足用户定时任务设置需要;Quartz是Java语言编写的API,其可以单独部署,也可以作为系统的模块嵌入既有代码中,通过开启监听触发定时任务的方式实现,相对而言,特别是用此种方式开辟大量监听很耗资源。
下面分别介绍这三种常用的定时任务实现方式。
3. 第三方API接口如Quartz
Quartz是一个任务日程管理系统,这个系统可以与任何其他软件系统集成或者一起使用。简而言之,“任务进度管理器”就是一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。
Quartz相当“轻量”,并且需要非常少的步骤/配置,如果需求比较基本,Quartz确实非常容易使用。
Quartz具有容错性,并且可以在你系统重起的时候持久化(记住)被纳入日程的任务。
3.1 Quartz功能简介
Quartz特点:
Quartz能嵌入到任何独立的应用中运行。
Quartz能在应用服务器或者Servlet容器中实例化,并且能够参与XA事务。
Quartz能够以独立的方式运行(在它自己的Java虚拟机中),可以通过RMI使用Quartz。
Quartz可以被实例化为独立程序的集群(有负载均衡和容错能力)
3.2 从软件组件的角度来看Quartz
Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。
如果你想将软件组件的执行纳入到日程中,它们只需简单地实现Job接口,这个接口有一个execute()方法。如果希望在日程安排的时间到达时通知组件,那么这些组件应实现TriggerListener或者JobListener接口。
Quartz主过程可以在应用中启动或者运行,也可以作为一个独立的应用(带有RMI接口),或者在一个J2EE 应用服务器中运行,并且可作为其它J2EE组件的一种引用资源。
3.3 为什么不使用java.util.Timer?
从JDK1.3开始,Java有了内建的定时器功能,即通过java.util.Timer和java.util.TimerTask来实现,为什么有人用Quartz而不用这些标准特性呢?有很多原因,下面是其中的一些:
1. Java定时器没有持久化机制。
2. Java定时器的日程管理不够灵活(只能设置开始时间、重复的间隔,设置特定的日期、时间等)
3. Java定时器没有使用线程池(每个Java定时器使用一个线程)
4. Java定时器没有切实的管理方案,你不得不自己完成存储、组织、恢复任务的措施。
一言以蔽之,这两个新类可以实现一个最基本的调度器。也就只能作为我们理想的完整调度器框架的一个小的部件。任何严格意义的作业调度器都提供直接指定执行时间,存储作业信息到多种介绍和使用钩子进行定制及其他更多的功能。单纯靠JDK的那两个类还不足以构建一个真正的作业调度器。JAVA的Timer类也没办法对作业和触发器作相应的组织,使用每任务一个线程,而不是线程池的方式,还有其他不足之处难以成全其实现一个完全意义的作业调度器。
流行的几个解决方案
Flux Scheduler:www.fluxcorp.com/
Enterprise Batching Queuing: www.argent.com/p/qe/qe.html
Unicenter AutoSys Job Management 4.5:www.ca.com
BMC Software ControlM: www.bmc.com
Cybermation ESP Espresso 4.2: www.cybermation.corly;9'm
Vexus consulting Avatar Job Scheduling Suite 4.5.5 :www.vexus.ca
Argent software The Argent Job Scheduler 4.5A :www.argent.com
Tidal Enterprise Scheduler: www.tidalsoftware.com
相关推荐
Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)
使用quartz实现的java 定时任务,通过写cron表达式,让任务在制定时刻触发执行。
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
Java使用quartz实现任务调度定时任务
定时任务quartz实现分组串行并行动态配置
自留demo,java定时任务quartz的基本实现,对应博客https://blog.csdn.net/jing12062011/article/details/82758536
java-springboot-quartz-定时任务.zip
完整的定时任务案例,导入Eclipse或者MyEclipse即可使用
java定时执行多任务和quartz定时执行多任务
1_什么事定时任务.mp4 2_为什么学习定时任务.mp4 3_定时任务技术发展趋势.mp4 4_主流定时任务框架优缺点和什么是分布式定时任务.mp4 5_环境搭建总体流程.mp4 6_前期准备-JDK.mp4 7_前期准备-Maven.mp4 8_前期准备-...
Quartz定时任务
Spring + quartz 定时任务修改定时时间不重启服务
java + quartz 实现定时任务的简单任务,下载即可运行
上一次传错了资源了,这个是正确的,包含quartz动态定时任务的
Java Quartz定时任务简单列子
quartz 动态定时任务 根据数据库数据配置动态定时任务
附件中实现了对quartz的动态添加、修改和删除定时任务,方便通过页面动态控制执行定时任务。
Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查,部署到tomcat即可看到定时任务执行效果。本人亲测,可用!
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等
Quartz定时任务框架,本次小白使用它实现一个简单的定时任务。每隔3秒打印一次Hello。这个是例子的jar包,实现过程在博客首页可看到。