前一段时间项目需要做一个定时发送消息的功能,该功能依附于Web应用上,即当Web应用启动时,该应用就开始作用。起先决定使用java.util.Timer和java.util.TimerTask来实现,但是研究了一下以后发现Java Timer的功能比较弱,而且其线程的范围不受Web应用的约束。后来发现了Quartz这个开源的调度框架,非常有趣。
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。本文详细介绍C#使用Quartz.NET。
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时。
Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。 此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。
Quartz核心简单描述作业(Job)实际上就是一个实现了Job接口的Java类,在其execute方法中,就是本次任务所执行的内容。(注:在和spring整合中如果用RAMJobStore去存储Job,可以不去实现Job接口。)Job状态一些信息可以通过JobDataMap被Job访问到,然后每次执行Job的时候都要从一个存储环境中取到值,然后创建一个新的JobDataMap,然后去执行Job,但是无法在两次Job之间持有那些信息;
1、源自暴风影音内部的数据组的每日定时跑的大量机器环境下的数据任务管理需求。<br> 2、做一个“真正通用”,“真正解决日常需求”的时间调度系统。<br> 3、秉承UNIX工具哲学: “就做一件事情,且把他做到最好。”
一个Cron-表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的。'/' 字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和 45秒"。而 "5/15"则表示"第5, 20, 35, 和 50". 在'/'前加"*"字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。
Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。 此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。
几乎每个项目中都用到了自动任务处理功能。所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作。最近用到Quartz这个框架,感觉很好,所以进行学习。下面的是转载的一份入门的文档。
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。 一、核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。
在这个演示中,我们只接触了Quartz框架的一些初级功能。记住,Java 5 和J2EE 5也有自己的任务调度机制,但是它们不像Quartz那样灵活易用。Quartz是目前唯一的开源Java任务调度框架,它的确为开发者的锦囊中增加了很有用的内容。你可从Open Symphony下载Quartz,并得到一份很好的教程和使用说明。
Quartz简单的一个实例
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
Quartz是一个开源的任务调度系统,它能用来调度很多任务的执行。•Quartz 能嵌入在其他应用程序里运行。 •Quartz 能在一个应用服务器里被实例化(或servlet容器), 并且参与XA事务•Quartz能独立运行(通过JVM),或者通过RMI •Quartz能被集群实例化
Java中Spring与Quartz整合定时任务
使用Quartz.net使用scheduler之前应首先实例化它。使用SchedulerFactory可以完成scheduler的实例化。用户可直接地实例化这个工厂类并且直接使用工厂的实例(例如下面的例子)。一旦一个scheduler被实例化,它就可以被启动(start),并且处于驻留模式,直到被关闭(shutdown)。
本节课程介绍上一节简单演示了如何调度一个作业。Quartz的核心就是Scheduler。本节将讲解如何使用Scheduler管理job信息。如何向Scheduler中添加触发器来触发信息。如何设置日期使触发器按规定触发。创建Scheduler做为一个Quartz框架的使用者,大多数时间我们都在与org.quartz.Scheduler接口实例进行操作。
介绍Quartz是一个开源的任务调度框架,能够安排多个任务在不同的时间执行。基本结构任务调度器Scheduler作业Job触发器Trigger任务分配任务控制任务存储Quartz配置Quartz集群Quartz介绍任务调度器Scheduler是Quartz框架的核心,管理Scheduler,管理Job,Trigger和Calendar。
你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用java编程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz调度器。
Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映像。 此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。