Quartz 是一个彻底由Java 编写的开源任务调度的框架,经过触发器设置做业定时运行规 则,控制做业的运行时间。Quartz 定时器做用不少,好比,定时发送信息和定时生成报表等。 Quartz 框架主要核心组件包括调度器、触发器和做业。调度器做为做业的总指挥,触发器 做为做业的操做者,做业为应用的功能模块。其关系如图java
Job 是一个接口,该接口只有一个方法execute ,被调度的做业(类)需实现该接口中execute() 方法, JobExecutionContext 类提供了调度上下文的各类信息。每次执行该Job 均从新建立一个 Job 实例。架构
Quartz 在每次执行Job 时,都从新建立一个Job 实例,因此它不直接接受一个Job 的实例, 相反它接收一个Job 实现类,以便运行时经过newlnstance()的反射机制实例化Job 。所以须要通 过一个类来描述Job 的实现类及其余相关的静态信息,如Job 名字、描述、关联监听器等信息, JobDetail 承担了这一角色。JobDetail 用来保存做业的详细信息。一个JobDetail 能够有多个 Trigger,可是一个Trigger 只能对应一个JobDetai l Trigger 触发器描述触发Job 的执行规则。主要有SimpleTrigger 和CronTrigger 这两个子 类。当仅需触发一次或者以固定时间间隔周期执行时, S impleTrigger 是最适合的选择;而 CronTrigger 则能够经过Cron 表达式定义出各类复杂时间规则的调度方案:如每早晨9:00 执 行, 周1、周3、周五下午5:00 执行等。Cron 表达式定义以下:框架
Scheduler 负责管理Quartz 的运行环境, Quartz 是基于多钱程架构的,它启动的时候会初始 化一套线程, 这套线程会用来执行一些预置的做业。Trigger 和JobDetail 能够注册到Scheduler 中, Scheduler 能够将Tri gger 绑定到某一JobDetail 中, 这样当Trigger 触发时,对应的Job 就被 执行。Scheduler 拥有一个SchedulerContext,它相似于ServletContext , 保存着Scheduler上下文spa
信息, Job 和Trigger 均可以访问SchedulerContext 内的信息。Scheduler 使用一个线程池做为任 务运行的基础设施,任务经过共享线程池中的线程提升运行效率。 了解完Quartz 定时器的基本原理后, 在src\main\java\com\ay\job 目录下建立定时器类 PraiseDataSaveDBJob .java,具体代码以下(点赞例子):线程
• @Configurable :加上此注解的类至关于XML配直文件,能够被Spring扫描初始化。 • @EnableScheduling : 经过在本身直类注解@EnableScheduling来开启对计划任务的支 持,而后在要执行计划任务的方法上注解@Schedul ed ,声明这是一个计划任务。 • @Scheduled :注解为定时任务,cron表达式里写执行的时机。blog
接口