近期闲来无事简单的研究了一下任务调度框架(当然你可以可以称它为工具,看问题的角度不同,在这里我称它为框架)---Quartz,在这里和大家分享一下。
- OpenSymphony提供的强大的开源任务调度框架。
- 官网:http://www.quartz-scheduler.org/ 。
- Quartz是纯java实现。
- Quartz的特点:
- 强大的调度功能
- 灵活的应用方式
- 分布式和集群能力
- Quartz主要用到的设计模式:
- Builder模式
- Factory模式
- 组件模式
- 链式写法
- Quartz体系结构:
- Quartz的三个核心概念:调度器,任务,触发器。
- Quartz重要组成:Job,JobDetail,JobBuilder,JobStore,Trigger,TriggerBuilder,ThreadPool,Schedular,Calender,监听器(JobListener,TriggerListener,SchedulerListener)。Quartz大概有300个类组成。
- Quartz的三个核心概念:调度器,任务,触发器。
- 浅谈Job:
- 实现业务逻辑的任务接口。
- Job接口非常容易实现,只有一个execute方法,在里面编写业务逻辑。
-
每次调度器执行job时,它在调用execute方法之前会创建一个新的job实例。
-
当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收。
-
浅谈JobDetail:JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例。
-
JobExecutionContext是什么? 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的execute()方法。 Job能通过JobExecutionContext对象访问到Quart运行时候的环境以及Job本身的明细数据。
-
JobDataMap是什么?
-
在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取。
-
JobDataMap可以用来装载任何可序列化的数据对象,当Job实例对象被执行时这些参数对象会传递给它。
-
JobDataMap实现了JDK的Map接口,并且添加了一些非常方便的方法来存取基本数据类型。
-
-
获取JobDetail和Trigger中自定义参数的两种方式:
-
通过JobExecutionContext实例获取JobDateMap对象,使用该对象中的方法获取。
-
在Job实现类中添加getter/setter方法(Quartz框架默认的JobFactory实现类在初始化job实例对象时会自动调用这些setter方法将参数值传过来)。
-
-
浅谈Trigger:
触发器通用属性:
JobKey: Job实例的标识,触发器被触发时,该指定的Job实例会执行。
StartTime: 首次被触发的时间。它的值的类型是Java.util.Date。
EndTime: 指定触发器不在被触发的时间。它的值的类型是Java.util.Date。
-
使用SimpleTrigger需要注意的几点:
-
重复次数可以为:0,正整数或者是SimpleTrigger.REPEAT_INDEFINITELY常量值。
-
重复执行间隔必须为0或长整数。
-
.一旦被指定了endTime参数,那么它会覆盖重复执行次数参数的效果。
-
-
浅谈CronTrigger:
-
基于日历的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间,比SimpleTrigger更常用。
-
Cron表达式:用于配置CronTrigger实例,是由7个子表达式组成的字符串,描述了时间表的详细信息,格式:[秒] [分] [小时] [日] [月] [周] [年]。
-
-
我们还可以使用在线生成器帮我们生成:http://cron.qqe2.com/。
-
-
浅谈Scheduler:
-
SchedulerFactory的两个实现类:StdSchedulerFactory 和DirectSchedulerFactory。
-
StdSchedulerFactory:
- 使用一组参数(Java.util.Properties)来创建和初始化Quartz调度器。
- 配置参数一般存储在quartz.properties中。
- 调用getScheduler方法就能创建和初始化对象。
-
- quartz.properties组成部分:调度器属性,线程池属性,作业存储属性,插件配置。
好了,今天就给大家总结到这里,欢迎大家吐槽拍砖。
-------------------------------------------------------------------------
中原银行总行科技岗内推,加我微信:18236913621。更新时间:2018年12月14日。