Quartz(02) 两种Trigger(SimpleTrigger/CronTrigger)
2016-08-06 21:08
411 查看
上一章讲了Quartz 的几个核心概念(上一章节地址Quartz快速入门).接下来看看Quartz的两种Trigger. SimpleTrigger/CronTrigger. 简单的定时任务,可以采用SimpleTrigger,复杂的任务一般采用CronTrigger.
源码下载地址
1.SimpleTrigger
SimpleTrigger是Quartz中最简单Trigger.它是为那种需要在特定的日期/时间启动,且以一个可能的间隔时间重复执行 n 次的 Job 所设计的。下面有一个例子,每5秒钟执行一次,一共执行4次的任务.
实现了com.quartz.job接口的类
使用SimpleTrigger
运行结果(只运行了4次)
2.CronTrigger 不仅可以设定简单的触发时间表,更可以设定非常复杂的触发时间表。 CronTrigger 是基于 Unix类似于 cron 表达式,如果对cron表达式比较熟悉,那么 学习起来经非常简单. 即使对cron表达式不熟悉,花一会儿的功夫也可以学会. cron 表达式在下一章重点讲解,本章稍作了解.假定有一个任务需要在21:00-21:03每分钟运行一次,此时我们发现SimpleTrigger 已经不能满足这个需求了.这个就是CronTrigger 登场的时候了,满足这个需求的对应的cron表达式是 0 00-03 21 * * ? (读者暂时不必深究这个表达式).实现如下
实现了com.quartz.job接口的类,
使用CronTrigger
运行结果
到此,通过两个简单的小例子,实现了SimpleTrigger/CronTrigger 不同的用法.在项目的开发中往往采取CronTrigger 来开发,因为它更加强大. 本章最大的悬念就是CronTrigger 要使用的cron 表达式,将在下一章(cron 表达式)来讲解.
源码下载地址
1.SimpleTrigger
SimpleTrigger是Quartz中最简单Trigger.它是为那种需要在特定的日期/时间启动,且以一个可能的间隔时间重复执行 n 次的 Job 所设计的。下面有一个例子,每5秒钟执行一次,一共执行4次的任务.
实现了com.quartz.job接口的类
package com.quartz.job; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; //实现了job接口的Q1 job public class Q1 implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("------------------------"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss"); System.out.println(sdf.format(new Date())); // 获取jobDetail 中的参数 JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); String para1 = jobDataMap.getString("para1"); System.out.println("jobDataMap中的para1:" + para1); System.out.println("------------------------"); } }
使用SimpleTrigger
package com.quartz.test; import org.quartz.JobBuilder; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.quartz.job.Q1; /** * 1.一个Job可以对应 多个Trigger,但一个Trigger只能对应一个Job * * 2.一个新的scheduler 或是处于standby状态的scheduler可以调用start方法 * * @author Administrator */ public class Listing_3_5 { public Listing_3_5() { } public Scheduler createScheduler() throws SchedulerException { return StdSchedulerFactory.getDefaultScheduler(); } @SuppressWarnings("static-access") public void scheduleJob(Scheduler scheduler) throws SchedulerException { JobDetail jobDetail = JobBuilder.newJob(Q1.class).withIdentity("job1_1", "jGroup1").build(); JobDataMap jobDataMap = jobDetail.getJobDataMap(); jobDataMap.put("para1", "hello"); // 一个scheduler 可以绑定多个job // 一个 Job 在同一个 Scheduler 实例中通过名称和组名能唯一被标识 // 每5秒执行一次,共执行四次(注意参数为3) SimpleScheduleBuilder builder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5) .withRepeatCount(3); Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger_1", "tGroup1").startNow() .withSchedule(builder).build(); scheduler.scheduleJob(jobDetail, trigger); } public static void main(String[] args) throws Exception { Listing_3_5 example = new Listing_3_5(); Scheduler scheduler = example.createScheduler(); example.scheduleJob(scheduler); scheduler.start(); } }
运行结果(只运行了4次)
2.CronTrigger 不仅可以设定简单的触发时间表,更可以设定非常复杂的触发时间表。 CronTrigger 是基于 Unix类似于 cron 表达式,如果对cron表达式比较熟悉,那么 学习起来经非常简单. 即使对cron表达式不熟悉,花一会儿的功夫也可以学会. cron 表达式在下一章重点讲解,本章稍作了解.假定有一个任务需要在21:00-21:03每分钟运行一次,此时我们发现SimpleTrigger 已经不能满足这个需求了.这个就是CronTrigger 登场的时候了,满足这个需求的对应的cron表达式是 0 00-03 21 * * ? (读者暂时不必深究这个表达式).实现如下
实现了com.quartz.job接口的类,
package com.quartz.job; import java.text.SimpleDateFormat; import java.util.Date; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; //实现了job接口的Q1 job public class Q1 implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("------------------------"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss"); System.out.println(sdf.format(new Date())); // 获取jobDetail 中的参数 JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); String para1 = jobDataMap.getString("para1"); System.out.println("jobDataMap中的para1:" + para1); System.out.println("------------------------"); } }
使用CronTrigger
package com.quartz.test; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.JobBuilder; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.quartz.job.Q1; /** * 1.一个Job可以对应 多个Trigger,但一个Trigger只能对应一个Job * * 2.一个新的scheduler 或是处于standby状态的scheduler可以调用start方法 * * @author Administrator */ public class Listing_3_6 { public Listing_3_6() { } public Scheduler createScheduler() throws SchedulerException { return StdSchedulerFactory.getDefaultScheduler(); } public void scheduleJob(Scheduler scheduler) throws SchedulerException { JobDetail jobDetail = JobBuilder.newJob(Q1.class).withIdentity("job1_1", "jGroup1").build(); JobDataMap jobDataMap = jobDetail.getJobDataMap(); jobDataMap.put("num", "123"); // cronTrigger 创建 // 21:00 - 21:03 每分钟执行一次 CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 00-03 21 * * ?"); CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger_1", "tGroup1") .withSchedule(cronScheduleBuilder).build(); scheduler.scheduleJob(jobDetail, cronTrigger); } public static void main(String[] args) throws Exception { Listing_3_6 example = new Listing_3_6(); Scheduler scheduler = example.createScheduler(); example.scheduleJob(scheduler); scheduler.start(); } }
运行结果
到此,通过两个简单的小例子,实现了SimpleTrigger/CronTrigger 不同的用法.在项目的开发中往往采取CronTrigger 来开发,因为它更加强大. 本章最大的悬念就是CronTrigger 要使用的cron 表达式,将在下一章(cron 表达式)来讲解.
相关文章推荐
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- PHP cron中的批处理
- php版本的cron定时任务执行器使用实例
- 让Linux下的cron以秒为单位执行shell脚本的3种方法
- Linux使用Cron+AT实现在某个确定的时间段内随机执行命令
- 在Java的Spring框架中配置Quartz的教程
- Java的作业调度类库Quartz基本使用指南
- 最流行的java后台框架spring quartz定时任务
- java定时调度器(Quartz)使用实例
- quartz实现定时功能实例详解(servlet定时器配置方法)
- linux下用cron定时执行任务的方法
- Spring3.2.0和Quartz1.8.6集群配置
- Cron表达式
- 如何让django方法自动地定期执行
- 分布式任务调度平台XXL-JOB
- JFinal 整合Quartz
- JFinal Quartz 支持配置文件和持久化
- <我的备忘录> quartz在Play中的简单使用
- Linux任务计划cron,chkconfig工具,systemd管理服务,unit介绍,target介绍