Quartz入门实例3-使用CronTrigger指定触发器执行job
来源:互联网 发布:软件界面错位 编辑:程序博客网 时间:2024/06/16 06:33
SimpleTrigger 对于 处理简单的事件出发还是不错的,但是你想要你的作业需要更复杂的执行计划时,你需要CronTrigger 给你提供更强更灵活的功能。
下面的内容摘自Quartz Job Scheduling Framrwork:
cron 这一观念是来自于 UNIX 世界。在 UNIX 中,cron 是一个运行于后台的守护程序,它负责所有基于时间的事件。尽管 Quartz 除相同的名字和相似的表达式语法外,并未分享到 UNIX cron 别的东西,我们还是值得花几个段落去理解 cron 背后的历史。我们这里的目标不是搞混 UNIX cron 表达式和 Quartz 的 cron 表达式,但是你应该了解 Quartz 表达式的历史,并探索为什么他们运作起来很像。这儿明显有许多有意图的相似性。UNIX Cron 的格式你可以认为 UNIX crontab 是 Trigger 和 Job 的组合,因为它们同时列出来执行计划和要执行的命令(job)。Cron Expression 的格式crontab 格式包含六段,前五段为执行计划,第六段为要执行的命令。(Quartz cron 表达式有七段。) 下面这些是执行计划的五个字段: ·分 (00-59) ·时 (00-23) ·日 (1-31) ·月 (1-12) ·周 (0-6 或 sun-sat)UNIX cron 格式表达式中允许出现一些特殊的字符,例如星号(*),它用来匹配所有值。这作有一个 UNIX crontab 的例子:0 8 * * * echo "WAKE UP" 2>$1 /dev/console这一 crontab 条目在每天早上8点打印字符串 "WAKE UP" 到 UNIX 的设置 /dev/console 上。图 5.1 显示了这个动作。
而Quartz cron的表达式则是:
每一个字段都有一套可以指定有效值,如
·秒 (0-59)
·分 (0-59)
·时 (0-23)
·天 (1-31) 要注意一些特别的月份
·月 (1-12) 也可以用字符串 “JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV ,DEC” 表示
·周 (1-7) 也可以用字符口串“SUN, MON, TUE, WED, THU, FRI ,SAT”表示
·年 (可选字段) (1970-2099)
“*” 代表整个时间段.
“/”:为特别单位,表示为“每”如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始, “3/20”表示表示每隔20分钟执行一次,“3”表示从第3分钟开始执行
“?”:表示每月的某一天,或第周的某一天
“L”:用于每月,或每周,表示为每月的最后一天,或每个月的最后星期几如“6L”表示“每月的最后一个星期五”
“W”:表示为最近工作日,如“15W”放在每月(day-of-month)字段上表示为“到本月15日最近的工作日”
““#”:是用来指定“的”每月第n个工作日,例 在每周(day-of-week)这个字段中内容为"6#3" or "FRI#3" 则表示“每月第三个星期五”
Cron表达式范例:
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
CronTriggerExample.java
package cn.zto.app;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.CronScheduleBuilder;import org.quartz.CronTrigger;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.SchedulerMetaData;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import cn.zto.job.SimpleJob;public class CronTriggerExample{ public void run() throws Exception {System.out.println("------- 初始化 -------------------"); SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); System.out.println("------- 初始化完成 --------"); System.out.println("------- 向Scheduler加入Job ----------------"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build(); CronTrigger trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger1", "group1") //设置Cron表达式 //从0秒开始 每隔20秒执行一次 .withSchedule(CronScheduleBuilder.cronSchedule("0/20 * * * * ?")) .build(); Date ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); job = JobBuilder.newJob(SimpleJob.class).withIdentity("job2", "group1").build(); trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger2", "group1") //从0分开始 每隔2分15秒执行一次 .withSchedule(CronScheduleBuilder.cronSchedule("15 0/2 * * * ?")) .build(); ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); job = JobBuilder.newJob(SimpleJob.class).withIdentity("job3", "group1").build(); trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger3", "group1") //每天的8点到17点 从0分开始 每隔2分钟执行一次 .withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 8-17 * * ?")) .build(); ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); job = JobBuilder.newJob(SimpleJob.class).withIdentity("job4", "group1").build(); trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger4", "group1") //每天的17点到23点 从0分开始 每隔3分钟执行一次 .withSchedule(CronScheduleBuilder.cronSchedule("0 0/3 17-23 * * ?")) .build(); ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); job = JobBuilder.newJob(SimpleJob.class).withIdentity("job5", "group1").build(); trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger5", "group1") //在每个月的第1天和第15天那天的10点钟执行 .withSchedule(CronScheduleBuilder.cronSchedule("0 0 10am 1,15 * ?")) .build(); ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); job = JobBuilder.newJob(SimpleJob.class).withIdentity("job6", "group1").build(); trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger6", "group1") //周一到周五 每0秒和30秒 执行一次 .withSchedule(CronScheduleBuilder.cronSchedule("0,30 * * ? * MON-FRI")) .build(); ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); job = JobBuilder.newJob(SimpleJob.class).withIdentity("job7", "group1").build(); trigger = (CronTrigger)TriggerBuilder.newTrigger() .withIdentity("trigger7", "group1") //周六周日 每0秒和30秒 执行一次 .withSchedule(CronScheduleBuilder.cronSchedule("0,30 * * ? * SAT,SUN")) .build(); ft = sched.scheduleJob(job, trigger); System.out.println(job.getKey() + " 已经在 : " + dateFormat.format(ft) + " 时运行,Cron表达式:" + trigger.getCronExpression()); System.out.println("------- 开始Scheduler ----------------"); sched.start(); System.out.println("------- Scheduler调用job结束 -----------------"); System.out.println("------- 等待5分钟... ------------"); try { Thread.sleep(300000L); } catch (Exception e) { } System.out.println("------- 关闭Scheduler ---------------------"); sched.shutdown(true); System.out.println("------- 关闭完成 -----------------"); SchedulerMetaData metaData = sched.getMetaData(); System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { CronTriggerExample example = new CronTriggerExample(); example.run(); }}
SimpleJob.java
package cn.zto.job;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobDetail;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobKey;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException {//通过上下文获取 JobKey jobKey = context.getJobDetail().getKey(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); System.out.println("SimpleJob类 :"+ jobKey + " 在 " + dateFormat.format(new Date())+" 时运行"); }}
- Quartz入门实例3-使用CronTrigger指定触发器执行job
- CronTrigger表达式和Quartz使用实例入门
- Quartz中CronTrigger(Cron 触发器)使用的 Cron表达式
- Quartz中CronTrigger(Cron 触发器)使用的 Cron表达式
- Quartz入门实例5-处理因执行job超时而错过触发的job
- Quartz入门实例14-让Quartz的Job使用Spring注入的Bean
- Quartz入门实例14-让Quartz的Job使用Spring注入的Bean
- Quartz入门实例1-Hello job
- Quartz入门实例6-处理job异常
- Quartz 触发器(SimpleTrigger&CronTrigger )配置说明
- Quartz任务调度中的触发器-CronTrigger
- Quartz使用之:远程job的执行
- Quartz CronTrigger配置及使用
- Spring Quartz Job实例
- Quartz入门实例7-处理被中断的Job
- Quartz入门实例8-实现一个Job监听器
- Quartz入门Demo(二)之CronTrigger
- Quartz学习笔记(二)—— Job和CronTrigger
- POJ 2386 Lake Counting(DFS)
- Training little cats
- 黑马程序员之java学习笔记9
- Linux下grep命令详解
- C语言中static,extern修饰符说明
- Quartz入门实例3-使用CronTrigger指定触发器执行job
- Mysql日志记录慢查询的SQL
- SQL Server:认识数据库
- 学习Linux 《鸟哥的Linux私房菜 基础学习篇(第三版)》--第14章 Linux账号管理和ACL权限设定1。 笔记
- 提高工作效率的十条好习惯
- XMPP 学习!
- 黑马程序员------入学资格------方法的设置及调用
- const资料整理
- 统计推断week4