作业调度框架Quartz学习笔记(二)_第1页
作业调度框架Quartz学习笔记(二)_第2页
作业调度框架Quartz学习笔记(二)_第3页
作业调度框架Quartz学习笔记(二)_第4页
作业调度框架Quartz学习笔记(二)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作业调度框架 Quartz 学习笔记 (二 )简单回顾一下上一节学习到的 HelloWorld 1创建一个job类,实现Job接口,覆盖public voidexecute(JobExecutionContext context) 方法,在方法中写入你 要执行的操作 (数据导入 /备份 ,轮询检查文件等 )代码2 创建一个主线程类 , 获得 Scheduler 对象 SchedulerFactory sf = new StdSchedulerFactory();Scheduler sched = sf.getScheduler(); 获得要执行的对象 JobDetail job = newJo

2、b(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线程也会停止工作我是分割线经过了 H

3、elloWorld 之后 ,您老人家可能对 Quartz 有所了 解,下面让我们继续深入 ,学习下 Quartz 重复执行任务该怎么 做简单的说就是 触发器(Trigger)的参数设置什么?触发器(Trigger) 不知道是什么 ?出门左转 << 作业调度框架 Quartz 学习笔记(一 )>>不谢还是老套路 ,一个 job 类 ,一个主线程类SimpleJob.javajava view plaincopypublic class SimpleJob implements JobOverridepublic voidexecute(JobExecutionContex

4、t context)throwsJobExecutionException / job 的名字String jobName = context.getJobDetail().getKey().getName();/ 任务执行的时间SimpleDateFormat dateFormat= new SimpleDateFormat(yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒);String jobRunTime =dateFormat.format(Calendar.getInstance().getTime();/ 输出任务执行情况任务 : + jobName + 在 +jo

5、bRunTime + 执行了); 在这里 对输出 的日期进行了一小下 格式化 ,适应国人习 惯.其它没什么好说的 0.0SimpleTriggerExample.java/* * SimpleTriggers ( 简单触发器 ) 的使用 . */ public classSimpleTriggerExample public static void main(String args) throws Exception SimpleTriggerExample example = new SimpleTriggerExample(); example.run(); public void run

6、() throws Exception / 日期格式化 SimpleDateFormat dateFormat = new SimpleDateFormat(yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒 );SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler();System.out.println(/ 下一个第 15 秒 例 : 则 执行时间为 15 秒 执行时间为 30 秒 行时间为 45 秒 时间为 00 秒 初始化/Date startTime =); 当

7、前 10 秒, 当前 16 秒 ,则 当前 33 秒 ,则 执 当前 48 秒 ,则 执行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 和

8、trigger 加入计划 . ft: 此任务要执行的时间Date ft = + 将在 : + dateFormat.format(ft) + 时运行 .并且重复 : + trigger.getRepeatCount() + 次 , 每次间隔 + trigger.getRepeatInterval() / 1000 + 秒 );/job2 将只会和执行一次 (和 job1 一样一样的 ,吼 ) job = newJob(SimpleJob.class).withIdentity(job2, group1).build();trigger = (SimpleTrigger)newTrigger()

9、 .withIdentity(trigger2, group1).startAt(startTime).build(); ft = sched.scheduleJob(job, trigger);+ 将在 : + dateFormat.format(ft) + 时运行 .并且重复 : + trigger.getRepeatCount() + 次 , 每次间隔 + trigger.getRepeatInterval() / 1000 + 秒 );/job3 将执行 11次(执行 1次,重复 10次) ,每 10秒重复一次job = newJob(SimpleJob.class).withIden

10、tity(job3,group1).build();trigger =newTrigger().withIdentity(trigger3,group1).startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(10)/ 重复间隔.withRepeatCount(10)/ 重复次数.build();ft = sched.scheduleJob(job, trigger); 将在 : + dateFormat.format(ft) + 时运行 .并且重复 : + trigger.getRepeatCount()

11、 + 次 , 每次间隔 + trigger.getRepeatInterval() / 1000 + 秒 );/ trigger3 改变了 . 每隔 10s 重复 .共重复 2 次此处说明 , 上面 job3 已经 设定了 trigger3 重复 10 次,每次10s/在这里又改变了 trigger3 的设置 ,不会对以前构成影响,而是当做一个新的来处理trigger =newTrigger().withIdentity(trigger3,group2).startAt(startTime).withSchedule(simpleSchedule()s(10).withIntervalInSe

12、cond.withRepeatCount(2).forJob(job).build(); ft =sched.scheduleJob(trigger);System.out.println(job.getKey().getName() + 改变过 trigger3 属性的 job3 : + dateFormat.format(ft) + 时运行 .并且重复 :+ trigger.getRepeatCount() + 次 , 每次 间隔 + trigger.getRepeatInterval() / 1000 + 秒);/ job5 将在 5 分钟后运行一次job = newJob(Simple

13、Job.class).withIdentity(job5, group1).build();trigger = (SimpleTrigger)newTrigger() .withIdentity(trigger5, group1) .startAt(futureDate(5, IntervalUnit.MINUTE) / 设定 5 分钟后运 行 .build(); ft = sched.scheduleJob(job, trigger);将在 : + dateFormat.format(ft) + 时运行 .并且重复 : + trigger.getRepeatCount() + 次 , 每次间

14、隔 /+ trigger.getRepeatInterval() / 1000 + 秒 );job6 每 40s 运行一次 ,没有指定重复次数 ,则无下限的重复job = newJob(SimpleJob.class).withIdentity(job6, sched.scheduleJob(job, trigger);group1).build();trigger =newTrigger().withIdentity(trigger6,group1).startAt(startTime).withSchedule(simpleSchedule().withIntervalInSeconds(

15、40).repeatForever().build();ft =+ 将在 : + dateFormat.format(ft) + 时运行 .并且重复 : + trigger.getRepeatCount() + 次 , 每次间隔 + trigger.getRepeatInterval() / 1000 + 秒 );/所有的任务都被加入到了 scheduler 中 ,但只有schedulers.start(); 时才开始执行 开始调度 (调用 .start() 方法 ); 系统 启 动 的 时间 : + dateFormat.format(new Date();/ 在 scheduled.sta

16、rt(); 之后 ,还可以将 jobs 添加到执行计划 中 / job7 将重复 20 次 ,每 5 分钟重复一次job = newJob(SimpleJob.class).withIdentity(job7,group1).build(); newTrigger() group1).withSchedule( chedule() s(5) / 5 分 钟trigger = .withIdentity(trigger7,.startAt(startTime)simpleS.withRepeatCount(20).build();.withIntervalInMinute/ 重复 20 次ft

17、= sched.scheduleJob(job, trigger);+ 将在 : + dateFormat.format(ft) + 时运行 .并且重复 : + trigger.getRepeatCount() + 次 , 每次间隔 + trigger.getRepeatInterval() / 1000 + 秒 );/job8 可以立即执行 . 无 trigger 注册 job = 手动触发 job8.( 立即执行 );sched.triggerJob(jobKey(job8, group1);System.out.println(等待 30 秒. );try Thread.sleep(30

18、L * 1000L); catch (Exception e) / job7 将马上执行 ,重复10 次 ,每秒一次System.out.println( 重新安排 . );trigger =newTrigger().withIdentity(trigger7,group1).startAt(startTime).withSchedule(simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20).build(); ft = sched.rescheduleJob(trigger.getKey(), trigger);被重新安排

19、在 : +dateFormat.format(ft) + 执行 . r 当前时间 : + dateFormat.format(new Date()+ 预定执行时间已过 ,任务立即 执行 ); try 等待 5 分钟 .);Thread.sleep(300L * 1000L); catch (Exception e) 调度已关闭 ); / 显示一下 已经执行的任务信息SchedulerMetaData metaData =sched.getMetaData();执行了 + metaData.getNumberOfJobsExecuted() + 个 jobs.); 几点说明 :1 DateBuilder.next

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论