设为首页    加入收藏
                 
徐州北大青鸟高中、中专、职高生就业解决方案 在职、转行、待业人员就业方案 北大青鸟中博校区环境 徐州中博大学生就业方案 校区周边环境
您的位置:首页 - 编程技巧   

quartz官方文档汉化教程_009
作者:中博IT教育 出处:中博IT教育 时间:2011-03-21
quartz官方文档汉化教程_009

   

    开头还是那句话,懒人直接下源码,如果有疑问,请看帖子最后的总结。

    本范例演示如何使用任务监听器。

    本例中任务监听器会在job1执行结束后启动job2运行。

 

1.         SimpleJob1.java

package com.zbaccp.quartz.cl.example9;

 

import java.util.Date;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

 

/**

 * 简单任务1,只是打印出任务名和执行时刻

 *

 * @author 常磊

 */

public class SimpleJob1 implements Job {

 

       private static Log _log = LogFactory.getLog(SimpleJob1.class);

 

       public SimpleJob1() {

       }

 

       // 任务体

       public void execute(JobExecutionContext context)

                     throws JobExecutionException {

              String jobName = context.getJobDetail().getFullName();

              _log.info("简单任务1说话了: " + jobName + " 运行时刻: " + new Date());

       }

 

}

 

2.         SimpleJob2.java

package com.zbaccp.quartz.cl.example9;

 

import java.util.Date;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

 

/**

 * 简单任务2,只是打印出任务名和执行时刻

 *

 * @author 常磊

 */

public class SimpleJob2 implements Job {

 

       private static Log _log = LogFactory.getLog(SimpleJob2.class);

 

       public SimpleJob2() {

       }

 

       // 任务体

       public void execute(JobExecutionContext context)

                     throws JobExecutionException {

              String jobName = context.getJobDetail().getFullName();

              _log.info("简单任务2说话了: " + jobName + " 运行时刻: " + new Date());

       }

 

}

 

3.         Job1Listener.java

package com.zbaccp.quartz.cl.example9;

 

import java.util.Date;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobDetail;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.quartz.JobListener;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SimpleTrigger;

 

/**

 * 监听器类,本范例中监听器与任务1类对应的JobDetail关联

 * 执行体中启动job2

 *

 * @author 常磊

 */

 

public class Job1Listener implements JobListener {

 

       private static Log _log = LogFactory.getLog(Job1Listener.class);

 

       public String getName() {

              return "job1_to_job2";

       }

 

       // job在执行前

       public void jobToBeExecuted(JobExecutionContext inContext) {

              _log.info("任务1监听器说: 任务将要被执行。");

       }

 

       // job被否决

       public void jobExecutionVetoed(JobExecutionContext inContext) {

              _log.info("任务1监听器说: 任务执行被否决。");

       }

 

       // job执行结束

       public void jobWasExecuted(JobExecutionContext inContext,

                     JobExecutionException inException) {

              _log.info("任务1监听器说: 任务执行结束。");

              // 启动job2

              JobDetail job2 = new JobDetail("job2", Scheduler.DEFAULT_GROUP,SimpleJob2.class);

 

              SimpleTrigger trigger = new SimpleTrigger("job2Trigger",Scheduler.DEFAULT_GROUP, new Date(), null, 0, 0L);

 

              try {

                     inContext.getScheduler().scheduleJob(job2, trigger);

              } catch (SchedulerException e) {

                     _log.warn("Unable to schedule job2!");

                     e.printStackTrace();

              }

       }

}

 

4.         ListenerExample.java

package com.zbaccp.quartz.cl.example9;

 

import java.util.Date;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobDetail;

import org.quartz.JobListener;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.SchedulerMetaData;

import org.quartz.SimpleTrigger;

import org.quartz.impl.StdSchedulerFactory;

 

/**

 *

 * 本范例演示任务监听器的使用。<br/>

 * 特别的地方在于,本例使用任务监听器在job1结束执行后,触发job2的执行。

 *

 * @author 常磊

 */

public class ListenerExample {

 

       public void run() throws Exception {

              Log log = LogFactory.getLog(ListenerExample.class);

 

              log.info("------- 初始化开始 ----------------------");

 

              // 1-- 排程实例化

              SchedulerFactory sf = new StdSchedulerFactory();

              Scheduler sched = sf.getScheduler();

 

              log.info("------- 初始化结束 -----------");

 

              log.info("------- 安排任务 -------------------");

 

              // 2-- 安排job1

              JobDetail job = new JobDetail("job1", "group1", SimpleJob1.class);

              SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1",

                            new Date(), null, 0, 0);

              // 2.1-- 监听器加入排程

              JobListener listener = new Job1Listener();

              sched.addJobListener(listener);

 

              // 2.2-- 监听器与具体的任务关联

              job.addJobListener(listener.getName());

              sched.scheduleJob(job, trigger);

 

              // 3-- 启动排程

              log.info("------- 启动排程 ----------------");

              sched.start();

 

              // 4-- 等待,给排程任务运行时间

              log.info("------- 请等待30秒钟... --------------");

              try {

                     Thread.sleep(30L * 1000L);

              } catch (Exception e) {

              }

 

              // 5-- 关闭排程

              log.info("------- 开始关闭 ---------------------");

              sched.shutdown(true);

              log.info("------- 关闭结束 -----------------");

 

              SchedulerMetaData metaData = sched.getMetaData();

              log.info("共执行任务 " + metaData.numJobsExecuted() + " 次。");

       }

 

       public static void main(String[] args) throws Exception {

 

              ListenerExample example = new ListenerExample();

              example.run();

       }

 

}

 

5.         我们的结论

l         Quartz 提供了三种类型的监听器:监听Job,监听Trigger,和监听Scheduler

l         JobListener TriggerListener 可被注册为全局或者非全局的。一个全局监听器能接收到所有的 Job/Trigger 的事件通知。而一个非全局监听器(或者说标准的监听器) 只能接收到相关联的JobTriiger 的事件。

l         对于JobListener ,要注册为一个非全局的监听器,调用 Scheduler addJobListener() 方法;注册为全局监听器,要调用 addGlobalJobListener() 方法。

l         使用job监听器,使用Scheduler 注册它,指定JobDetail实例相关联。当指定任务执行时,会得到相应的通知。

l         请看JobListenerAPI

       public void jobToBeExecuted(JobExecutionContext context)

       JobDetail将要执行时(关联的触发器已经触发),被排程调用。如果监听器否决了执行,则本方法不被调用。

 

       public void jobExecutionVetoed(JobExecutionContext context)

       JobDetail将要执行(关联的触发器已经触发),但是触发器否决了执行时,被排程调用。

 

       public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException)

       JobDetail执行后,关联的触发器triggered(xx)方法调用前,被排程调用。

 

l         控制台的输出

 ------- 启动排程 ----------------

 

[DEBUG] 26 九月 02:46:45.525 下午 DefaultQuartzScheduler_QuartzSchedulerThread [org.quartz.simpl.SimpleJobFactory]

Producing instance of Job ’group1.job1’, class=com.zbaccp.quartz.cl.example9.SimpleJob1

 

[INFO] 26 九月 02:46:45.535 下午 DefaultQuartzScheduler_Worker-1 [com.zbaccp.quartz.cl.example9.Job1Listener]

任务1监听器说: 任务将要被执行。

 

[DEBUG] 26 九月 02:46:45.535 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.core.JobRunShell]

Calling execute on job group1.job1

 

[INFO] 26 九月 02:46:45.545 下午 DefaultQuartzScheduler_Worker-1 [com.zbaccp.quartz.cl.example9.SimpleJob1]

简单任务1说话了: group1.job1 运行时刻: Tue Sep 26 14:46:45 CST 2006

 

[INFO] 26 九月 02:46:45.545 下午 DefaultQuartzScheduler_Worker-1 [com.zbaccp.quartz.cl.example9.Job1Listener]

任务1监听器说: 任务执行结束。


 文件下载:quartzOfficial9

>>更多新闻
相关新闻
2009届毕业生离职首因:薪资福利偏低 2009届毕业生离职首因:薪资福利偏低
微软为防止恶意蠕虫 禁用MSN 2009中链接 微软为防止恶意蠕虫 禁用MSN 2009中链接
2009年5大安全漏洞 全被微软Adobe瓜分 2009年5大安全漏洞 全被微软Adobe瓜分
徐州市2009年软件产业销售收入突破6亿元 徐州市2009年软件产业销售收入突破6亿元
中国移动2009年国际漫游资费降50% 中国移动2009年国际漫游资费降50%
 
在线报名
  • 姓     名:*
  • Q       Q:*
  • 电     话:*
  • 地     址:*
在线咨询  
中心简介
校区简介
校区环境
关于北大青鸟
特色优势
常见问题解答
网站地图
 
ACCP5.0 课程咨询
ACCP软件工程师课程
什么是ACCP
ACCP5.0课程介绍
各课程定位与特色
各阶段课程
教学模式
ACCP5.0课程体系
ACCP认证证书
 
中博教育客服在线
©徐州北大青鸟 隐私政策
学费咨询
学历咨询
专业咨询
订座试听
就业咨询
课程咨询
测试认证
软件认证