作业调度框架 Quartz 学习笔记(二)

  • 格式:doc
  • 大小:40.50 KB
  • 文档页数:12

作业调度框架 Quartz 学习笔记(二)

简单回顾一下上一节学习到的 "HelloWorld "

1 创建一个job类,实现Job接口,覆盖 public void

execute(JobExecutionContext context) 方法,在方法中写入你要执行的操作(数据导入/备份,轮询检查文件等)代码

2 创建一个主线程类, 获得 Scheduler 对象

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

获得要执行的对象 JobDetail job =

newJob(HelloJob.class).withIdentity("job1", "group1").build();

定义触发器 Trigger trigger =

newTrigger().withIdentity("trigger1",

"group1").startAt(runTime).build();

将任务和Trigger放入scheduler :

sched.scheduleJob(job, trigger);

启动 和 停止

sched.start(); sched.shutdown(true);

注意 给job 留有足够长的时间,如果主线程类停止工作,job线程也会停止工作

------------------------------------------------我是分割线--------------------------------------------------------

经过了 "HelloWorld" 之后,您老人家可能对 Quartz 有所了解,下面让我们继续深入,学习下Quartz 重复执行任务该怎么做

简单的说就是 触发器(Trigger)的参数设置. 什么? 触发器(Trigger)不知道是什么?

出门左转 <<作业调度框架 Quartz 学习笔记(一)>> 不谢

还是老套路,一个job 类,一个主线程类

SimpleJob.java

[java] view plaincopypublic class SimpleJob implements Job

{ @Override public void

execute(JobExecutionContext context) throws

JobExecutionException { // job 的名字

String jobName = context.getJobDetail().getKey().getName();

// 任务执行的时间 SimpleDateFormat dateFormat

= new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时

mm 分 ss 秒"); String jobRunTime =

dateFormat.format(Calendar.getInstance().getTime());

// 输出任务执行情况 System.out.println("任务 : " + jobName + " 在 " +jobRunTime + " 执行了

"); } }

在这里 对输出 的日期进行了一小下 格式化,适应国人习惯.

其它没什么好说的 0.0

SimpleTriggerExample.java

[java] view plaincopyimport static

org.quartz.DateBuilder.futureDate; import static

org.quartz.JobBuilder.newJob; import static

org.quartz.JobKey.jobKey; import static

org.quartz.SimpleScheduleBuilder.simpleSchedule; import

static org.quartz.TriggerBuilder.newTrigger; import

java.text.SimpleDateFormat; import java.util.Date; import

org.quartz.DateBuilder; import

org.quartz.DateBuilder.IntervalUnit; import

org.quartz.JobDetail; import org.quartz.Scheduler; import

org.quartz.SchedulerFactory; import

org.quartz.SchedulerMetaData; import

org.quartz.SimpleTrigger; import

org.quartz.impl.StdSchedulerFactory; /** * Simple

Triggers (简单触发器) 的使用. */ public class SimpleTriggerExample { public static void

main(String[] args) throws Exception

{ SimpleTriggerExample example = new

SimpleTriggerExample(); example.run(); }

public void run() throws Exception { // 日期格式化

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy

年 MM 月 dd 日 HH 时 mm 分 ss 秒");

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

System.out.println("--------------- 初始化 -------------------");

// 下一个第15秒 例: // 当前 10秒,则 执行时间为15秒 // 当前 16秒,则

执行时间为30秒 // 当前 33秒,则 执行时间为45秒 // 当前 48秒,则 执行时间为00秒 Date startTime =

DateBuilder.nextGivenSecondDate(null, 15); //

job1 将只会执行一次 JobDetail job =

newJob(SimpleJob.class).withIdentity("job1", "group1").build();

SimpleTrigger trigger = (SimpleTrigger)

newTrigger() .withIdentity("trigger1",

"group1") .startAt(startTime).build();

// 把job1 和 trigger加入计划 . ft:此任务要执行的时间 Date ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey().getName() + " 将在 : " +

dateFormat.format(ft) + " 时运行.并且重复: "

+ trigger.getRepeatCount() + " 次, 每次间隔 "

+ trigger.getRepeatInterval() / 1000 + " 秒"); //

job2 将只会和执行一次(和job1一样一样的,吼~~)

job = newJob(SimpleJob.class).withIdentity("job2",

"group1").build(); trigger = (SimpleTrigger)

newTrigger() .withIdentity("trigger2",

"group1").startAt(startTime).build(); ft =

sched.scheduleJob(job, trigger);

System.out.println(job.getKey().getName() + " 将在 : " +

dateFormat.format(ft) + " 时运行.并且重复: "

+ trigger.getRepeatCount() + " 次, 每次间隔 "

+ trigger.getRepeatInterval() / 1000 + " 秒"); //

job3 将执行11次(执行1次,重复10次) ,每10秒重复一次

job = newJob(SimpleJob.class).withIdentity("job3",

"group1").build(); trigger =

newTrigger() .withIdentity("trigger3",

"group1") .startAt(startTime)

.withSchedule( simpleSchedule() .withIntervalInSeconds(10)// 重复间隔 .withRepeatCount(10))