Quartz

Quartz

Quartz 是一个完全由Java 编写的开源任务调度的框架,通过触发器设置作业定时运行规 则,控制作业的运行时间。Quartz 定时器作用很多,比如,定时发送信息和定时生成报表等。 Quartz 框架主要核心组件包括调度器、触发器和作业。调度器作为作业的总指挥,触发器 作为作业的操作者,作业为应用的功能模块。其关系如图

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 执 行, 周一、周三、周五下午5:00 执行等。Cron 表达式定义如下:

Scheduler 负责管理Quartz 的运行环境, Quartz 是基于多钱程架构的,它启动的时候会初始 化一套线程, 这套线程会用来执行一些预置的作业。Trigger 和JobDetail 可以注册到Scheduler 中, Scheduler 可以将Tri gger 绑定到某一JobDetail 中, 这样当Trigger 触发时,对应的Job 就被 执行。Scheduler 拥有一个SchedulerContext,它类似于ServletContext , 保存着Scheduler上下文

信息, Job 和Trigger 都可以访问SchedulerContext 内的信息。Scheduler 使用一个线程池作为任 务运行的基础设施,任务通过共享线程池中的线程提高运行效率。 了解完Quartz 定时器的基本原理后, 在src\main\java\com\ay\job 目录下创建定时器类 PraiseDataSaveDBJob .java,具体代码如下(点赞例子):

• @Configurable :加上此注解的类相当于XML配直文件,可以被Spring扫描初始化。 • @EnableScheduling : 通过在自己直类注解@EnableScheduling来开启对计划任务的支 持,然后在要执行计划任务的方法上注解@Schedul ed ,声明这是一个计划任务。 • @Scheduled :注解为定时任务,cron表达式里写执行的时机。

使用Quartz 定时器有两种方式: 一是XML 配置:二是注解方式。

posted on 2019-06-05 14:39  kinglead  阅读(787)  评论(0编辑  收藏  举报

导航