Quartz是什么
Quartz是一个功能强大的开源任务调度库,几乎可以集成到任何Java应用程序中,无论是超小型的独立应用还是超大型电子商务系统。
它常用于企业级应用中:
- Driving Process Workflow:当新订单下达,可以安排一个30分钟内触发的任务,检查订单状态。
- System Maintenance:安排每个工作日晚上11点将数据库内容转储到文件的任务。
- Providing reminder services:提供提醒服务。
Quartz还支持集群模式和对JTA服务。
Quartz中的重要API及概念
http://www.quartz-scheduler.org/documentation/quartz-2.2.2/tutorials/
超重要API
Quartz设计理念:为什么设计Job和Trigger?
While developing Quartz, we decided that it made sense to create a separation between the schedule and the work to be performed on that schedule. This has (in our opinion) many benefits. For example, Jobs can be created and stored in the job scheduler independent of a trigger, and many triggers can be associated with the same job. Another benefit of this loose-coupling is the ability to configure jobs that remain in the scheduler after their associated triggers have expired, so that that it can be rescheduled later, without having to re-define it. It also allows you to modify or replace a trigger without having to re-define its associated job.
隔离schedule和schedule上执行的Job,优点是可见的:
可以独立于触发器创建作业并将其存储在作业调度程序中,并且许多触发器可以与同一作业相关联。这样的松耦合好处是什么?
最简单的Quartz使用案例
- Scheduler 和调度程序交互的主要API生命周期从SchedulerFactoru创建它开始,到调用shutdown方法结束。一旦Scheduler创建,任何关于scheduling相关的事,他都为所欲为:添加、删除、列出所有的Jobs和triggers、暂停触发器等。在start方法之前,不会做任何事情。
- Job 你希望被调度器调度的任务组件接口。当Job的触发器触发时,调度程序的工作线程将调用execute方法。该方法接收一个JobExecutionContext对象,为Job实例提供了丰富的运行时环境信息,比如:scheduler、trigger、jobDataMap、job、calendar、各种time等。
- JobDetail 用于定义任务。JobDetail对象由Quartz客户端在将job加入Scheduler提供,也就是你的程序。它包含了不同为job设置的属性,还有可以用来为job储存状态信息的JobDataMap。注意它和Job的区别,它实际上是Job实例的属性。【Job定义如何执行,JobDetail定义有何属性】
- Trigger 触发任务执行。触发器可能具有与之关联的JobDataMap,以便于将特定于触发器触发的参数传递给Job。Quartz提供了几种不同的触发器,SimpleTrigger和CronTrigger比较常用。如果你需要一次性执行作