quartz定时任务2Word文档格式.docx

上传人:b****2 文档编号:15115803 上传时间:2022-10-27 格式:DOCX 页数:14 大小:23.62KB
下载 相关 举报
quartz定时任务2Word文档格式.docx_第1页
第1页 / 共14页
quartz定时任务2Word文档格式.docx_第2页
第2页 / 共14页
quartz定时任务2Word文档格式.docx_第3页
第3页 / 共14页
quartz定时任务2Word文档格式.docx_第4页
第4页 / 共14页
quartz定时任务2Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

quartz定时任务2Word文档格式.docx

《quartz定时任务2Word文档格式.docx》由会员分享,可在线阅读,更多相关《quartz定时任务2Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

quartz定时任务2Word文档格式.docx

自己写的“定时程序”实现此接口的voidexecute(JobExecutionContextarg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。

Trigger抽象类:

调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。

Quertz中提供了两类触发器为:

SimpleTrigger,CronTrigger。

前者用于实现比较简单的定时功能,例如几点开始,几点结束,隔多长时间执行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的定时描述,例如每个月的最后一个周五,每周的周四等。

JobDetail类:

具体某个定时程序的详细描述,包括Name,Group,JobDataMap等。

JobExecutionContext类:

定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。

JobDataMap类:

用于描述一个作业的参数,参数可以为任何基本类型例如String,float等,也可为某个对象的引用.

JobListener,TriggerListener接口:

用于监听触发器状态和作业扫行状态,在特写状态执行相应操作。

JobStore类:

在哪里执行定进程序,可选的有在内存中,在数据库中。

开始:

边看例题边学习,首先从简单触发器开始……

1、作业通过实现org.quartz.job接口,可以使Java类变成可执行的。

这个类用一条非常简单的输出语句覆盖了execute(JobExecutionContextcontext)方法。

程序代码:

importjava.util.Date;

importorg.quartz.Job;

importorg.quartz.JobExecutionContext;

importorg.quartz.JobExecutionException;

publicclassSimpleQuartzJobimplementsJob{

publicSimpleQuartzJob(){

}

publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{

System.out.println("

InSimpleQuartzJob-executingitsJOBat"

+newDate()+"

by"

+context.getTrigger().getName());

}

2、触发器和调度器

publicvoidtask()throwsSchedulerException

{

//通过SchedulerFactory来获取一个调度器

SchedulerFactoryschedulerFactory=newStdSchedulerFactory();

Schedulerscheduler=schedulerFactory.getScheduler();

//引进作业程序

JobDetailjobDetail=

newJobDetail("

jobDetail-s1"

"

jobDetailGroup-s1"

SimpleQuartzJob.class);

//new一个触发器

SimpleTriggersimpleTrigger=

newSimpleTrigger("

simpleTrigger"

triggerGroup-s1"

);

//设置作业启动时间

longctime=System.currentTimeMillis();

simpleTrigger.setStartTime(newDate(ctime));

//设置作业执行间隔

simpleTrigger.setRepeatInterval(10000);

//设置作业执行次数

simpleTrigger.setRepeatCount(10);

//设置作业执行优先级默认为5

//simpleTrigger.setPriority(10);

//作业和触发器设置到调度器中

scheduler.scheduleJob(jobDetail,simpleTrigger);

//启动调度器

scheduler.start();

一个简单的quartz任务就完成了Quartz定时发送消息的功能,该功能依附于Web应用上,即当Web应用启动时,该应用就开始作用。

起先决定使用java.util.Timer和java.util.TimerTask来实现,但是研究了一下以后发现JavaTimer的功能比较弱,而且其线程的范围不受Web应用的约束。

后来发现了Quartz这个开源的调度框架,非常有趣。

首先我们要得到Quartz的最新发布版。

目前其最新的版本是1.6。

我们可以从以下地址获得它的完整下载包,包中可谓汤料十足,不仅有我们要的quartz.jar,更包含多个例程和详细的文档,从API到配置文件的XSD一应俱全。

感兴趣的朋友也可以在src目录下找到该项目的源码一看究竟。

废话少说,下面就来看一看这个东东是怎么在JavaWebApplication中得以使用的。

首先不得不提出的是Quartz的三个核心概念:

调度器、触发器、作业。

让我们来看看他们是如何工作的吧。

一.作业总指挥——调度器1.Scheduler接口该接口或许是整个Quartz中最最上层的东西了,它提携了所有触发器和作业,使它们协调工作。

每个Scheduler都存有JobDetail和Trigger的注册,一个Scheduler中可以注册多个JobDetail和多个Trigger,这些JobDetail和Trigger都可以通过groupname和他们自身的name加以区分,以保持这些JobDetail和Trigger的实例在同一个Scheduler内不会冲突。

所以,每个Scheduler中的JobDetail的组名是唯一的,本身的名字也是唯一的(就好像是一个JobDetail的ID)。

Trigger也是如此。

Scheduler实例由SchedulerFactory产生,一旦Scheduler实例生成后,我们就可以通过生成它的工厂来找到该实例,获取它相关的属性。

下面的代码为我们展示了如何从一个Servlet中找到SchedulerFactory并获得相应的Scheduler实例,通过该实例,我们可以获取当前作业中的testmode属性,来判断该作业是否工作于测试模式。

Java代码

//从当前Servlet上下文中查找StdSchedulerFactory

ServletContextctx=request.getSession().getServletContext();

StdSchedulerFactoryfactory=(StdSchedulerFactory)ctx.getAttribute("

org.quartz.impl.StdSchedulerFactory.KEY"

Schedulersch=null;

try{

//获取调度器

sch=factory.getScheduler("

SchedulerName"

//通过调度器实例获得JobDetail,注意领会JobDetailName和GroupName的用法

JobDetailjd=sch.getJobDetail("

JobDetailName"

GroupName"

Mapjobmap1=jd.getJobDataMap();

istest=jobmap1.get("

testmode"

)+"

"

;

}catch(Exceptionse){

//如果得不到当前作业,则从配置文件中读取testmode

ReadXML("

job.xml"

).get(“job.testmode”);

}//从当前Servlet上下文中查找StdSchedulerFactory

}

Scheduler实例生成后,它处于"

stand-by"

模式,需要调用其start方法来使之投入运作。

publicclassSendMailShedule{

//设置标准SchedulerFactory

staticSchedulerFactoryschedFact=neworg.quartz.impl.StdSchedulerFactory();

staticSchedulersched;

publicstaticvoidrun()throwsException{

//生成Scheduler实例

sched=schedFact.getScheduler();

//创建一个JobDetail实例,对应的Job实现类是SendMailJob

JobDetailjobDetail=newJobDetail("

myJob"

sched.DEFAULT_GROUP,SendMailJob.class);

//设置CronTrigger,利用Cron表达式设定触发时间

CronTriggertrigger=newCronTrigger("

myTrigger"

"

test"

0081*?

sched.scheduleJob(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1