application定时器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Quartz定时发送消息的功能,该功能依附于Web应用上,即当Web应用启动时,该应用就开始作用。起先决定使用java.util.Timer和

java.util.TimerTask来实现,但是研究了一下以后发现Java Timer的功能比较弱,而且其线程的范围不受Web应用的约束。后来发现了Quartz这个开源的调度框架,非常有趣。

首先我们要得到Quartz的最新发布版。目前其最新的版本是1.6。我们可以从以下地址获得它的完整下载包,包中可谓汤料十足,不仅有我们要的quartz.jar,更包含多个例程和详细的文档,从API到配置文件的XSD一应俱全。感兴趣的朋友也可以在src目录下找到该项目的源码一看究竟。

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

首先不得不提出的是Quartz的三个核心概念:调度器、触发器、作业。让我们来看看他们是如何工作的吧。

一.作业总指挥——调度器

1.Scheduler接口

该接口或许是整个Quartz中最最上层的东西了,它提携了所有触发器和作业,使它们协调工作。每个Scheduler都存有JobDetail和Trigger的注

册,一个Scheduler中可以注册多个JobDetail和多个Trigger,这些JobDetail和Trigger都可以通过group name和他们自身的name加以区分,以保持这些JobDetail和Trigger的实例在同一个Scheduler内不会冲突。所以,每个Scheduler中的JobDetail的组名是唯一的,本身的名字也是唯一的(就好像是一个JobDetail的ID)。Trigger也是如此。

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

Java代码

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

2.

3. ServletContext ctx=request.getSession().getSer

vletContext();

4.

5. StdSchedulerFactory factory = (StdSchedulerFac

tory) ctx.getAttribute("org.quartz.impl.StdSchedulerFactor

y.KEY");

6.

7. Scheduler sch = null;

8.

9.try {

10.

11.//获取调度器

12.

13. sch = factory.getScheduler("SchedulerName"

);

14.

15.//通过调度器实例获得JobDetail,注意领会

JobDetailName和GroupName的用法

16.

17. JobDetail jd=sch.getJobDetail("JobDetailNa

me", "GroupName");

18.

19. Map jobmap1=jd.getJobDataMap();

20.

21. istest=jobmap1.get("testmode")+"";

22.

23. } catch (Exception se) {

24.

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

testmode

26.

27. ReadXML("job.xml").get(“job.testmode”);

28.

29. }

[java]view plaincopyprint?

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

2.

3. ServletContext ctx=request.getSession().getServ

letContext();

4.

5. StdSchedulerFactory factory = (StdSchedulerFact

ory) ctx.getAttribute("org.quartz.impl.StdSchedulerFactory.

KEY");

6.

7. Scheduler sch = null;

8.

9. try {

10.

11. //获取调度器

12.

13. sch = factory.getScheduler("SchedulerName"

);

14.

15. //通过调度器实例获得JobDetail,注意领会

JobDetailName和GroupName的用法

16.

17. JobDetail jd=sch.getJobDetail("JobDetailNa

me", "GroupName");

18.

19. Map jobmap1=jd.getJobDataMap();

20.

21. istest=jobmap1.get("testmode")+"";

22.

23. } catch (Exception se) {

24.

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

testmode

相关文档
最新文档