`

Quartz之JobListener

阅读更多
问题1:我想在一个任务执行后在执行第二个任务怎么办呢
Quartz:使用JobListener(任务监听器可实现)
下面示例中演示了相互传递,请参见注释
Job1Listener.java
public class Job1Listener implements JobListener {

    private static Logger _log = LoggerFactory.getLogger(Job1Listener.class);
    
    public String getName() {
        return "job1_to_job2";
    }

    public void jobToBeExecuted(JobExecutionContext inContext) {
    	//任务监听器执行任务1之前你可以选择的操作
        _log.error("Job1Listener says: Job Is about to be executed.");
        //向任务1传递数据
        inContext.getJobDetail().getJobDataMap().put("username", "天涯");
    }

    public void jobExecutionVetoed(JobExecutionContext inContext) {
        _log.error("Job1Listener says: Job Execution was vetoed.");
    }

    public void jobWasExecuted(JobExecutionContext inContext,JobExecutionException inException) {
        _log.error("Job1Listener says: Job was executed.");
        
        //执行任务2
        JobDetail job2 = newJob(SimpleJob2.class)
            .withIdentity("job2")
            .usingJobData("username", "david") //向任务2传递数据传递可成功接收
            .build();
        
        Trigger trigger = (SimpleTrigger) newTrigger() 
            .withIdentity("job2Trigger")
            .startNow()            
            .build();
        
        //向任务2传递数据,这里不知怎么回事,传递参数在任务2取值为: null
        inContext.getJobDetail().getJobDataMap().put("sex", "男");
        
        try {
            // schedule the job to run!
            inContext.getScheduler().scheduleJob(job2, trigger);
        } catch (SchedulerException e) {
            _log.error("出错了...");
            e.printStackTrace();
        }        
    }
}

ListenerExample.java
Quartz2个人感觉设计相当灵活,脱离了相互依赖,只需要添加监听器相关设置就行了
注意下面代码:
JobListener listener = new Job1Listener();
Matcher<JobKey> matcher = KeyMatcher.keyEquals(job.getKey());
  sched.getListenerManager().addJobListener(listener, matcher); 

这个任务1实现了监听器 joblistener,在这个 joblistener中有四个方法实现,在
public void jobWasExecuted(JobExecutionContext inContext,JobExecutionException inException) {
}

中去执行任务2的操作,以次类推的话,它可执行一个任务集合了
public void run() throws Exception {
    	
        Logger log = LoggerFactory.getLogger(ListenerExample.class);

        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        JobDetail job = newJob(SimpleJob1.class)
            .withIdentity("job1")
            .build();
        
        Trigger trigger = newTrigger() 
            .withIdentity("trigger1")
            .startNow()
            .build();

       
        JobListener listener = new Job1Listener();
        Matcher<JobKey> matcher = KeyMatcher.keyEquals(job.getKey());
        sched.getListenerManager().addJobListener(listener, matcher);    
      
        sched.scheduleJob(job, trigger);      
        sched.start();
      
        try {
          
            Thread.sleep(30L * 1000L);           
        } catch (Exception e) {
        	
        }        
    
        sched.shutdown(true);
        SchedulerMetaData metaData = sched.getMetaData();
        log.error("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");

    }

SimpleJob1.java
public class SimpleJob1 implements Job {

    private static Logger _log = LoggerFactory.getLogger(SimpleJob1.class);
   
    public SimpleJob1() {
    }

    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        JobKey jobKey = context.getJobDetail().getKey();
        String userName = (String)context.getJobDetail().getJobDataMap().get("username");
        _log.error("SimpleJob1 says: " + jobKey + " executing at " + new Date() + ",姓名: " + userName);
    }
}

SimpleJob2.java
public class SimpleJob2 implements Job {

    private static Logger _log = LoggerFactory.getLogger(SimpleJob2.class);

   
    public SimpleJob2() {
    }

   
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
      
        JobKey jobKey = context.getJobDetail().getKey();
        String userName = (String)context.getJobDetail().getJobDataMap().getString("username");
        String sex = (String)context.getJobDetail().getJobDataMap().getString("sex");
        _log.error("SimpleJob1 says: " + jobKey + " executing at " + new Date() + ",英文名: " + userName+",性别: " + sex);
    }

}

输出结果为:
[ERROR] 2011-08-12 03:56:44.750 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example9.Job1Listener]
Job1Listener says: Job Is about to be executed.

[ERROR] 2011-08-12 03:56:44.765 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example9.SimpleJob1]
SimpleJob1 says: DEFAULT.job1 executing at Fri Aug 12 15:56:44 CST 2011,姓名: 天涯

[ERROR] 2011-08-12 03:56:44.765 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example9.Job1Listener]
Job1Listener says: Job was executed.

[ERROR] 2011-08-12 03:56:44.765 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example9.SimpleJob2]
SimpleJob1 says: DEFAULT.job2 executing at Fri Aug 12 15:56:44 CST 2011,英文名: david,性别: null
分享到:
评论
4 楼 iotwlw 2015-08-13  
//向任务2传递数据,这里不知怎么回事,传递参数在任务2取值为: null 
        inContext.getJobDetail().getJobDataMap().put("sex", "男"); 


这句话是给任务一传参吧
3 楼 h416373073 2014-10-23  
非常感谢bz的分享
2 楼 liuzidong 2011-12-04  
谢谢您的指出, 我也是在学习呀
1 楼 kuro_0505 2011-12-03  
  inContext.getJobDetail().getJobDataMap().put("sex", "男");   这样传参是错误的,这样是全局的,不是放在job的dataMap上。

相关推荐

    Quartz2.2.1之JobListener、Triggerlistener、SchedulerListener实例使用

    Quartz2.2.1之JobListener、Triggerlistener、SchedulerListener实例使用,具体效果与过程看博文 http://blog.csdn.net/evankaka/article/details/45498363

    quartz quartz-1.8.6 dbTables 建表sql

    quartz quartz-1.8.6 dbTables quartz动态任务调度需要的数据库脚本。

    quartz-2.3.2-API文档-中文版.zip

    赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.2.pom; 包含翻译后的API文档:quartz-2.3.2-javadoc-API...

    quartz指南,Quartz 工程

    文件里面包括 1:Quartz开发指南.pdf 2:Quartz从入门到进阶.pdf 3:QuartzBeginnerExample一个附带的工程例子 4:quartz-1.6.1.zip Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它...

    quartz-1.6.0.jar和quartz-all-1.6.0.jar

    该压缩包内包含两个quartz的jar包, 分别是quartz-1.6.0.jar和quartz-all-1.6.0.jar

    quartz-2.3.0-API文档-中文版.zip

    赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar; 赠送Maven依赖信息文件:quartz-2.3.0.pom; 包含翻译后的API文档:quartz-2.3.0-javadoc-API...

    quartz-2.2.3版本的quartz初始化sql语句

    quartz-2.2.3版本的quartz初始化sql语句

    quartz简单实例quartz简单实例

    quartz简单实例quartz简单实例quartz简单实例quartz简单实例

    Autofac.Extras.Quartz, Quartz.Net的Autofac集成.zip

    Autofac.Extras.Quartz, Quartz.Net的Autofac集成 Autofac.Extras.Quartz用于 Quartz.Net的Autofac集成包。Autofac.Extras.Quartz 为每个石英作业创建嵌套的litefime作用域。 完成作业执行后释放嵌套作用域。这允许...

    自开发实现Quartz Web管理工具

    网上能找到的Quartz Web管理的资料都是使用的一个国外人写的Quartz WebApp的东东,功能也很全面。但是作为自己的应用其实用不了那么多功能,一般我们只要可以定义一个job,指定一个Cron表达式完成工作即可,附带的...

    quartz内部表.sql

    quartz内部表.sql。

    postgres-quartz.sql

    postgres quatrz初始化sql脚本文件、pg、quartz、qrtz_开头的表 配置文件需求修改 #org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore....

    quartz1.5,quartz1.6,quartz1.8

    Quartz1.5,Quartz1.6,Quartz1.8。Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个...

    Quartz.NET-2.0

    Quartz.NET框架的核心是调度器。调度器负责管理Quartz.NET应用运行时环境。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz.NET采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器...

    Quartz原理及实例

    Quartz原理及实例,spring4.x+Quartz.2.2.1结合的开发,静态和动态实例

    lucene与quartz例子

    lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子lucene quartz 例子

    Quartz之CronExpression详解

    详细介绍CronExpression表达式设定定时任务的规则

    关于spring中quartz的配置

    关于spring中quartz的配置

    深入解读Quartz的原理

    深入解读Quartz的原理,定时任务框架是web开发过程中使用很多的框架之一

    Quartz-2.0.2 CSDN下载

    Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。 Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的...

Global site tag (gtag.js) - Google Analytics