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
- 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比较常用。如果你需要一次性执行作业或需要在给定的时间触发一个作业并重复执行N次且有两次执行间有延时delay,SimpleTrigger较为方便。如果你希望基于类似日期表触发执行任务,CronTrgger推荐使用。
- JobBuilder 用于构建JobDetail的。
- TriggerBuilder 用于构建Trigger的。
Quartz提供了各种各样的Builder类,定义了Domain Specific Language,且都提供了静态的创建方法,我们可以使用import static简化书写。
重要概念
- Identity当作业和触发器在Quartz调度程序中注册时,会获得标识键。JobKey和TriggerKey允许被置入group中,易于组织管理。唯一的,是name和group的组合标识。
- JobDataMap是Map的实现,具有key-value相关操作,存储可序列化数据对象,供Job实例在执行时使用。可以使用usingJobData(key,value)在构建Jobdetail的时候传入数据,使用jobDetail.getJobDataMap()获取map。
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 an