quartz2.2.1 example 09代码分析

来源:互联网 发布:js冒泡排序 从小到大 编辑:程序博客网 时间:2024/04/30 21:36
public class SimpleJob1 implements Job {


public void execute(JobExecutionContext context)
throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
LogSelf.fslLog.info(jobKey + " 任务execute……");
}

}

------------------------------------------------

public class SimpleJob2 implements Job {


public void execute(JobExecutionContext context)
throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
LogSelf.fslLog.info(jobKey + "  任务execute……");
}
}

--------------------------------------------------监听器

package com.quartz.fsl.test.example9;


import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;


import com.qdwb.mlxc.util.LogSelf;
/*
 * 创建监听器接口JobListener的实现类Job1Listener,当调度触发任务SimpleJob1 时,
 * 执行此监听器并把SimpleJob2 注册到调度中
 */
public class Job1Listener implements JobListener {


public String getName() {
return "job1_to_job2";
}


public void jobToBeExecuted(JobExecutionContext inContext) {
   LogSelf.fslLog.info("jobToBeExecuted方法: 任务将会被执行");
 }


 public void jobExecutionVetoed(JobExecutionContext inContext) {
   LogSelf.fslLog.info("Job1Listener says: Job Execution was vetoed.");
 }


 public void jobWasExecuted(JobExecutionContext inContext, JobExecutionException inException) {
   LogSelf.fslLog.info("jobWasExecuted方法: 任务已经执行结束了");


   JobDetail job2 = JobBuilder.newJob(SimpleJob2.class).withIdentity("job2").build();
   Trigger trigger = TriggerBuilder.newTrigger().withIdentity("job2Trigger").startNow().build();
   try
   {
     inContext.getScheduler().scheduleJob(job2, trigger);
   } catch (SchedulerException e) {
     LogSelf.fslLog.warn("Unable to schedule job2!");
     e.printStackTrace();
   }
 }


}

----------------------------------------------------------------

package com.quartz.fsl.test.example9;


import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobListener;
import org.quartz.Matcher;
import org.quartz.ScheduleBuilder;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.KeyMatcher;


import com.qdwb.mlxc.util.LogSelf;


/*
 * 创建调度程序,把监听器Job1Listener绑定到任务SimpleJob1 的触发事件中
 */
public class ListenerExample {
public void run() throws Exception {


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


JobDetail job = JobBuilder.newJob(SimpleJob1.class)
.withIdentity("job1").build();


Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1")
.startNow().withSchedule(
SimpleScheduleBuilder.simpleSchedule().withRepeatCount(
3).withIntervalInSeconds(5)).build();


JobListener listener = new Job1Listener();
Matcher matcher = KeyMatcher.keyEquals(job.getKey());
sched.getListenerManager().addJobListener(listener, matcher);


sched.scheduleJob(job, trigger);


LogSelf.fslLog.info("-------手动触发Scheduler ----------------");
sched.start();


LogSelf.fslLog.info("-------暂停30秒... --------------");
try {
Thread.sleep(30000L);
} catch (Exception e) {
}


LogSelf.fslLog.info("------- Shutting Down ---------------------");
sched.shutdown(true);


SchedulerMetaData metaData = sched.getMetaData();
LogSelf.fslLog.info("Executed " + metaData.getNumberOfJobsExecuted()
+ " jobs.");
}


public static void main(String[] args) throws Exception {
ListenerExample example = new ListenerExample();
example.run();
}
}

-----------------------------测试结果:

log4j:ERROR Could not find value for key log4j.appender.stdout
log4j:ERROR Could not instantiate appender named "stdout".
[quartz2.2.1][INFO ] 2014-06-30 16:52:25 -- main -------手动触发Scheduler ----------------
[quartz2.2.1][INFO ] 2014-06-30 16:52:25 -- main -------暂停30秒... --------------
[quartz2.2.1][INFO ] 2014-06-30 16:52:25 -- DefaultQuartzScheduler_Worker-1 jobToBeExecuted方法: 任务将会被执行
[quartz2.2.1][INFO ] 2014-06-30 16:52:25 -- DefaultQuartzScheduler_Worker-1 DEFAULT.job1 任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:25 -- DefaultQuartzScheduler_Worker-1 jobWasExecuted方法: 任务已经执行结束了
[quartz2.2.1][INFO ] 2014-06-30 16:52:25 -- DefaultQuartzScheduler_Worker-2 DEFAULT.job2  任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:30 -- DefaultQuartzScheduler_Worker-3 jobToBeExecuted方法: 任务将会被执行
[quartz2.2.1][INFO ] 2014-06-30 16:52:30 -- DefaultQuartzScheduler_Worker-3 DEFAULT.job1 任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:30 -- DefaultQuartzScheduler_Worker-3 jobWasExecuted方法: 任务已经执行结束了
[quartz2.2.1][INFO ] 2014-06-30 16:52:30 -- DefaultQuartzScheduler_Worker-4 DEFAULT.job2  任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:35 -- DefaultQuartzScheduler_Worker-5 jobToBeExecuted方法: 任务将会被执行
[quartz2.2.1][INFO ] 2014-06-30 16:52:35 -- DefaultQuartzScheduler_Worker-5 DEFAULT.job1 任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:35 -- DefaultQuartzScheduler_Worker-5 jobWasExecuted方法: 任务已经执行结束了
[quartz2.2.1][INFO ] 2014-06-30 16:52:35 -- DefaultQuartzScheduler_Worker-6 DEFAULT.job2  任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:40 -- DefaultQuartzScheduler_Worker-7 jobToBeExecuted方法: 任务将会被执行
[quartz2.2.1][INFO ] 2014-06-30 16:52:40 -- DefaultQuartzScheduler_Worker-7 DEFAULT.job1 任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:40 -- DefaultQuartzScheduler_Worker-7 jobWasExecuted方法: 任务已经执行结束了
[quartz2.2.1][INFO ] 2014-06-30 16:52:40 -- DefaultQuartzScheduler_Worker-8 DEFAULT.job2  任务execute……
[quartz2.2.1][INFO ] 2014-06-30 16:52:55 -- main ------- Shutting Down ---------------------
[quartz2.2.1][INFO ] 2014-06-30 16:52:56 -- main Executed 8 jobs.

0 0