任务需求:
银行日终定时跑批,开始思路是使用最简单的方式Timer任务调度线程去跑,但是有个问题,Timer调度的话,不能够精准的时间,因为牵扯到集群的问题,所以最后考虑到了quartz集群
Quartz版本:
2.3.1
Quartz 核心元素:
Quartz任务调度的核心元素为:Scheduler——任务调度器、Trigger——触发器、Job——任务。其中trigger和job是任务调度的元数据,scheduler是实际执行调度的控制器。
Trigger是用于定义调度时间的元素,即按照什么时间规则去执行任务。Quartz中主要提供了四种类型的trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,和NthIncludedDayTrigger。这四种trigger可以满足企业应用中的绝大部分需求。
Job用于表示被调度的任务。主要有两种类型的job:无状态的(stateless)和有状态的(stateful)。对于同一个trigger来说,有状态的job不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。Job主要有两种属性:volatility和durability,其中volatility表示任务是否被持久化到数据库存储,而durability表示在没有trigger关联的时候任务是否被保留。两者都是在值为true的时候任务被持久化或保留。一个job可以被多个trigger关联,但是一个trigger只能关联一个job。
Scheduler由scheduler工厂创建:
DirectSchedulerFactory或者StdSchedulerFactory。看很多资料都是基于这两个去做的,本文是直接从工厂接口SchedulerFactory去做。
Scheduler主要有三种:
RemoteMBeanScheduler,RemoteScheduler和StdScheduler。也是基于接口去直接做不适用他们的3个实现。
正文:
工厂: