Quartz框架简介

Quartz框架简介

2023年7月21日发(作者:)

Quartz框架简介⼀、Quartz概述: Quartz是⼀个完全由编写的开源任务调度的框架,通过触发器设置作业定时运⾏规则,控制作业的运⾏时间。其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来⾼可⽤性和伸缩性。主要⽤来执⾏定时任务,如:定时发送信息、定时⽣成报表等等。

⼆、相关术语:

三、Quartz的体系结构简介: Quartz框架主要核⼼组件包括调度器、触发器、作业。调度器作为作业的总指挥,触发器作为作业的操作者,作业为应⽤的功能模块。其关系如下图所⽰:

Job为作业的接⼝,为任务调度的对象;JobDetail⽤来描述Job的实现类及其它相关的静态信息;Trigger做为作业的定时管理⼯具,⼀个Trigger只能对应⼀个作业实例,⽽⼀个作业实例可对应多个触发器;Scheduler做为定时任务容器,是quartz最上层的东西,它提携了所有触发器和作业,使它们协调⼯作,每个Scheduler都存有JobDetail和Trigger的注册,⼀个Scheduler中可以注册多个JobDetail和多个Trigger。

1、Job Job是⼀个接⼝,只有⼀个⽅法void execute(JobExecutionContext context),被调度的作业(类)需实现该接⼝中execute()⽅法,JobExecutionContext类提供了调度上下⽂的各种信息。每次执⾏该Job均重新创建⼀个Job实例,如:

[java]

1. public class DDNJob implements Job{

2.

3. public void execute(JobExecutionContext arg0) throws JobExecutionException {

4. perform();

5. }

6.

7. public void perform(){ //执⾏报表统计⼊⼝函数

8. //业务逻辑

9. n("⾃动DDN预授权开始执⾏-------------执⾏时间:"+new Date());

10. }

11. }

注:DDNJob类为需要定时执⾏的类,execute为定时执⾏的⽅法。⼀个定时任务对应⼀个Job实现类。

2、JobDetailQuartz在每次执⾏Job时,都重新创建⼀个Job实例,所以它不直接接受⼀个Job的实例,相反它接收⼀个Job实现类,以便运⾏时通过newInstance()的反射机制实例化Job。因此需要通过⼀个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这⼀⾓⾊。JobDetail ⽤来保存我们作业的详细信息。⼀个JobDetail可以有多个Trigger,但是⼀个Trigger只能对应⼀个JobDetail,

⽰例:

[java]

1. 1. JobDetail jobDetail = new JobDetail("myJob","myGroup",)

2. 2. 说明:

3. 3. myJob:job 名

4. 4. myGroup:job 组(为'null'时,使⽤缺省的组T_GROUP)

5. 5. :要被执⾏的Java类。

运⽤spring集成的MethodInvokingJobDetailFactoryBean时spring能⾃动⽣成符合quartz要去的JobDetail。Spring中配置如下:[html]

1.

2.

3. class="InvokingJobDetailFactoryBean">

4.

5. (并发执⾏)

6.

7.

3、TriggerTrigger是⼀个类,描述触发Job执⾏的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个⼦类。当仅需触发⼀次或者以固定时间间隔周期执⾏,SimpleTrigger是最适合的选择;⽽CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度⽅案:如每早晨9:00执⾏,周⼀、周三、周五下午5:00执⾏等;Spring中配置如下:SimpleTrigger使⽤⽰例:[html]

1. // Initiate SimpleTrigger with its name and group name

2. SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger","triggerGroup1");

3. // set its start up time

4. rtTime(new Date(tTimeMillis()));

5. // set the interval, how often the job should run (10 seconds here)

6. eatInterval(10000);

7. // set the number of execution of this job, set to 10 times.

8. eatCount(10);

通过Spring配置,jobDetail为配置的Job描述,startDelay为系统启动执⾏延迟时间,repeatCount为调⽤次数,repeatInterval为Job触发时间间隔。[html] 1.

2.

3.

4.

5.

6.

CronTrigger使⽤⽰例:[java]

1. // Initiate CronTrigger with its name and group name

2. CronTrigger cronTrigger = new CronTrigger("cronTrigger","triggerGroup2");

3. try {

4. // setup CronExpression

5. CronExpression cexp = new CronExpression("0/5 * * * * ?");

6. // Assign the CronExpression to CronTrigger

7. nExpression(cexp);

8. } catch (Exception e) {

9. tackTrace();

10. }

通过Spring配置,jobDetail为配置的Job描述,cronExpression为Job的运⾏规则,具体见附录部分内容。[html]

1.

2.

3.

4.

4、Scheduler Scheduler负责管理Quartz的运⾏环境,Quartz它是基于多线程架构的,它启动的时候会初始化⼀套线程,这套线程会⽤来执⾏⼀些预置的作业。Trigger和JobDetail可以注册到Scheduler中;Scheduler可以将Trigger绑定到某⼀JobDetail中,这样当Trigger触发时,对应的Job就被执⾏。 Scheduler拥有⼀个SchedulerContext,它类似于ServletContext,保存着Scheduler上下⽂信息,Job和Trigger都可以访问SchedulerContext内的信息。Scheduler使⽤⼀个线程池作为任务运⾏的基础设施,任务通过共享线程池中的线程提⾼运⾏效率。 应⽤⽰例:

[java]

1. SchedulerFactory schedulerFactory = new StdSchedulerFactory();

2. // Retrieve a scheduler from schedule factory

3. Scheduler scheduler = eduler();

4. …

5. // schedule a job with JobDetail and Trigger

6. leJob(jobDetail, simpleTrigger);

7. // start the scheduler

8. (); Spring中配置:

[html]

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

其中,dataSource为数据源配置,triggers为触发器列表配置,可以同时包含多个trigger,configLocation为quartz配置⽂件ties加载路径。

四、总结: 我们不只有⼀种两种⽅法来实现我们的定时任务,就我知道的出了我们的quartz框架之外,我们也⾃⼰封装有⾃⼰的定时器,再加上各种开源的插件。那我⼯作的公司来说,我们⽤windows服务来完成这个定时任务,万变不离其宗,理解了他们的原理以及精髓,我们就可以去创新,去写出符合⾃⼰要求的⼯具了!

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689929988a295207.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信