根据SimpleScheduleBuilder配置不同的SimpleTrigger触发器
Job代码:
[java] view plaincopy
- 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())+" 时运行");
- }
- }
SimpleTriggerExample.java
[java] view plaincopy
- package cn.zto.app;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import org.quartz.DateBuilder;
- import org.quartz.JobBuilder;
- import org.quartz.JobDetail;
- import org.quartz.JobKey;
- import org.quartz.Scheduler;
- import org.quartz.SchedulerFactory;
- import org.quartz.SchedulerMetaData;
- import org.quartz.SimpleScheduleBuilder;
- import org.quartz.SimpleTrigger;
- import org.quartz.TriggerBuilder;
- import org.quartz.TriggerKey;
- import org.quartz.impl.StdSchedulerFactory;
- import cn.zto.job.SimpleJob;
- public class SimpleTriggerExample
- {
- 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秒");
- //设置任务触发的时间,时间为下方15的倍数 会在任意时间段的 15S 30S 45S 60S 开始会触发一次
- Date startTime = DateBuilder.nextGivenSecondDate(null, 15);
- JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build();
- SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger1", "group1")
- .startAt(startTime)
- .build();
- Date ft = sched.scheduleJob(job, trigger);
- System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, " //获取重复的次数
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- job = JobBuilder.newJob(SimpleJob.class).withIdentity("job2", "group1").build();
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger2", "group1")
- .startAt(startTime)
- //设置一个用于触发的时间
- .withSchedule(SimpleScheduleBuilder//SimpleScheduleBuilder是简单调用触发器,它只能指定触发的间隔时间和执行次数;
- .simpleSchedule()//创建一个SimpleScheduleBuilder
- .withIntervalInSeconds(10)//指定一个重复间隔,以毫秒为单位。
- .withRepeatCount(10))//指定反复的次数
- .build();
- ft = sched.scheduleJob(job, trigger);
- System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- //将触发器放入 group2 里面
- .withIdentity("trigger2", "group2")
- .startAt(startTime)
- .withSchedule(SimpleScheduleBuilder
- .simpleSchedule()
- .withIntervalInSeconds(10)
- .withRepeatCount(2))
- .forJob(job)
- .build();
- ft = sched.scheduleJob(trigger);
- System.out.println(job.getKey() + " 也会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- job = JobBuilder.newJob(SimpleJob.class).withIdentity("job3", "group1").build();
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger3", "group1")
- .startAt(startTime)
- .withSchedule(SimpleScheduleBuilder
- .simpleSchedule()
- .withIntervalInSeconds(10)
- .withRepeatCount(5))
- .build();
- ft = sched.scheduleJob(job, trigger);
- System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- job = JobBuilder.newJob(SimpleJob.class).withIdentity("job4", "group1").build();
- System.out.println("当前时间为:"+dateFormat.format(new Date()));
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger4", "group1")
- //设定时间为5分钟后运行
- .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.MINUTE))
- .build();
- ft = sched.scheduleJob(job, trigger);
- System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- job = JobBuilder.newJob(SimpleJob.class).withIdentity("job5", "group1").build();
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger5", "group1")
- .startAt(startTime)
- .withSchedule(SimpleScheduleBuilder
- .simpleSchedule()
- .withIntervalInSeconds(40)
- //触发器会一直重复执行下去
- .repeatForever())
- .build();
- ft = sched.scheduleJob(job, trigger);
- System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- System.out.println("------- 开始Scheduler ----------------");
- sched.start();
- System.out.println("------- Scheduler调用job结束 -----------------");
- job = JobBuilder.newJob(SimpleJob.class).withIdentity("job6", "group1").build();
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger6", "group1")
- .startAt(startTime)
- .withSchedule(SimpleScheduleBuilder
- .simpleSchedule()
- .withIntervalInMinutes(1)
- .withRepeatCount(20))
- .build();
- ft = sched.scheduleJob(job, trigger);
- System.out.println(job.getKey() + " 将会在: " + dateFormat.format(ft) + "时运行,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- job = JobBuilder.newJob(SimpleJob.class).withIdentity("job7", "group1")
- .storeDurably()//该job没有触发器,该方法将durability设置为true
- .build();
- //添加一个没有出发器的job
- sched.addJob(job, true);
- System.out.println("手动触发job7...");
- //jobKey用来唯一的标识一个JobDetail
- //执行Job
- sched.triggerJob(JobKey.jobKey("job7", "group1"));
- System.out.println("------- 等待10S... --------------");
- try
- {
- Thread.sleep(10000L);
- }
- catch (Exception e)
- {
- }
- System.out.println("------- 改变触发器6 --------------------");
- trigger = (SimpleTrigger)TriggerBuilder.newTrigger()
- .withIdentity("trigger10", "group1")
- .startAt(startTime)
- .withSchedule(SimpleScheduleBuilder
- .simpleSchedule()
- .withIntervalInMinutes(1)
- .withRepeatCount(20))
- .build();
- //根据触发器获取指定的Job然后更改此Job的触发器
- //新的触发器不需要旧的触发器的名称相同
- ft = sched.rescheduleJob(new TriggerKey("trigger6","group1")//获取TriggerKey(用来标识唯一的Trigger)
- , trigger);
- System.out.println("job6 重新在 " + dateFormat.format(ft)+ "时运行 ,"
- + "重复: " + trigger.getRepeatCount() + " 次, "
- + "每 " + trigger.getRepeatInterval() / 1000L + " s 重复一次");
- 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
- {
- SimpleTriggerExample example = new SimpleTriggerExample();
- example.run();
- }
- }
运行结果:
[plain] view plaincopy
- ------- 初始化 -------------------
- SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
- SLF4J: Defaulting to no-operation (NOP) logger implementation
- SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
- ------- 初始化完成 --------
- ------- 向Scheduler加入Job ----------------
- group1.job1 将会在: 2014年07月31日 13时51分45秒时运行,重复: 0 次, 每 0 s 重复一次
- group1.job2 将会在: 2014年07月31日 13时51分45秒时运行,重复: 10 次, 每 10 s 重复一次
- group1.job2 也会在: 2014年07月31日 13时51分45秒时运行,重复: 2 次, 每 10 s 重复一次
- group1.job3 将会在: 2014年07月31日 13时51分45秒时运行,重复: 5 次, 每 10 s 重复一次
- 当前时间为:2014年07月31日 13时51分41秒
- group1.job4 将会在: 2014年07月31日 13时56分41秒时运行,重复: 0 次, 每 0 s 重复一次
- group1.job5 将会在: 2014年07月31日 13时51分45秒时运行,重复: -1 次, 每 40 s 重复一次
- ------- 开始Scheduler ----------------
- ------- Scheduler调用job结束 -----------------
- group1.job6 将会在: 2014年07月31日 13时51分45秒时运行,重复: 20 次, 每 60 s 重复一次
- 手动触发job7...
- ------- 等待10S... --------------
- SimpleJob类 :group1.job7 在 2014年07月31日 13时51分41秒 时运行
- SimpleJob类 :group1.job1 在 2014年07月31日 13时51分45秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时51分45秒 时运行
- SimpleJob类 :group1.job3 在 2014年07月31日 13时51分45秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时51分45秒 时运行
- SimpleJob类 :group1.job6 在 2014年07月31日 13时51分45秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时51分45秒 时运行
- ------- 改变触发器6 --------------------
- job6 重新在 2014年07月31日 13时51分45秒时运行 ,重复: 20 次, 每 60 s 重复一次
- ------- 等待5分钟... ------------
- SimpleJob类 :group1.job6 在 2014年07月31日 13时51分51秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时51分55秒 时运行
- SimpleJob类 :group1.job3 在 2014年07月31日 13时51分55秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时51分55秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分05秒 时运行
- SimpleJob类 :group1.job3 在 2014年07月31日 13时52分05秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分05秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分15秒 时运行
- SimpleJob类 :group1.job3 在 2014年07月31日 13时52分15秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分25秒 时运行
- SimpleJob类 :group1.job3 在 2014年07月31日 13时52分25秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时52分25秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分35秒 时运行
- SimpleJob类 :group1.job3 在 2014年07月31日 13时52分35秒 时运行
- SimpleJob类 :group1.job6 在 2014年07月31日 13时52分45秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分45秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时52分55秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时53分05秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时53分05秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时53分15秒 时运行
- SimpleJob类 :group1.job2 在 2014年07月31日 13时53分25秒 时运行
- SimpleJob类 :group1.job6 在 2014年07月31日 13时53分45秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时53分45秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时54分25秒 时运行
- SimpleJob类 :group1.job6 在 2014年07月31日 13时54分45秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时55分05秒 时运行
- SimpleJob类 :group1.job6 在 2014年07月31日 13时55分45秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时55分45秒 时运行
- SimpleJob类 :group1.job5 在 2014年07月31日 13时56分25秒 时运行
- SimpleJob类 :group1.job4 在 2014年07月31日 13时56分41秒 时运行
- SimpleJob类 :group1.job6 在 2014年07月31日 13时56分45秒 时运行
- ------- 关闭Scheduler ---------------------
- ------- 关闭完成 -----------------
根据SimpleScheduleBuilder配置不同的SimpleTrigger触发器的更多相关文章
- Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置
Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置 >>>>>>>>>>>>&g ...
- 浅谈Trigger(SimpleTrigger&CronTrigger)
1.Trigger是什么 Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的. 2.Quartz中的Trigger 3.触发器通用属性: JobK ...
- 【Quartz】Quartz存储与持久化-基于quartz.properties的配置
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. Quartz存储与持久化 Quartz提供两种基本作业存储类型.第一种类型叫做RAM ...
- Quartz_1_简单编程式任务调度使用(SimpleTrigger)
最近在工作中,要做定时任务的更能,最开始的时候,想到的是 JavaSE 中,自带 Timer 及 TimerTask 联合使用,完成定时任务.最后发现,随着业务的复杂,JDK 中的 Timer 和 T ...
- Quartz.Net - Lesson2: 任务和触发器
Lesson 2: 任务和触发器 本系列文章是官方3.x文档的翻译,原文地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tut ...
- Quartz.Net系列(十六):通过Plugins模式使用Xml方式配置Job和Trigger和自定义LogPrivider
1.简单介绍 Quarz.Net中采用插件式来实现配置文件配置,通过XMLSchedulingDataProcessor类进行Xml数据处理 默认配置文件命名:quart_jobs.xml publi ...
- Shiro配置Session检测时Quartz版本冲突
项目背景: shiro 1.3 + quartz 2.x 2018-9-11 22:20:35补充: 经过测试,本人发现 ,通过实现 org.apache.shiro.session.mgt.Exec ...
- Jenkins学习四:Jenkins 邮件配置
本文主要对Windows环境 jenkins 的邮件通知进行介绍 jenkins 内置的邮件功能 使用email-ext插件扩展的邮件功能 邮件通知功能主要包含两个部分:全局配置和项目配置. 一. 先 ...
- jenkins配置及使用中出现的问题
安装中遇到的问题: 1.linux中最好用普通用户安装tomcat和jenkins,用普通用户启动tomcat,否则jenkins工作空间不会在普通用户下,而线上自动发布部署时,是不允许用root用户 ...
随机推荐
- web前端:html
一.理解表单的作用 1.web 应用程序不仅仅是给用户显示数据,还应该给用户提供一个可以输入数据的图形用户界面.表单的主要作用在于在网页上提供一个图形用户界面,已采集和提交用户输入的数据. 2.htm ...
- HTML 5 全局属性
下面的全局属性可用于任何 HTML5 元素.HTML 5 全局属性NEW:HTML 5 中新的全局属性.属性 描述accesskey 规定访问元素的键盘快捷键class 规定元素的类名(用于规定样 ...
- C#语法糖之第四篇: 扩展方法
今天继续分享C#4.0语法糖的扩展方法,这个方法也是我本人比较喜欢的方法.大家先想想比如我们以前写的原始类型不能满足现在的需求,而需要在该类型中添加新的方法来实现时大家会怎么做.我先说一下我没有学习到 ...
- 研究WCF并发及处理能力的控制
WCF 跟并发 性能相关的几个配置:1.系统控制的客户端网络连接并发(如果服务端也需要并发请求的话这个参数也是需要的): <configuration> ...
- 工具: ass109.awk 分析 Oracle 的跟踪文件
原文链接:http://www.eygle.com/archives/2009/11/awk_ass109.html 以前分析Oracle的跟踪文件,主要靠手工阅读,最近发现ass109.awk文件是 ...
- NSAttributedString用法
以前看到这种字号和颜色不一样的字符串,想出个讨巧的办法就是“¥150”一个UILabel,“元/位”一个UILabel.今天翻看以前的工程,command点进UITextField中看到[attrib ...
- CSS 导航栏
实例: 导航栏 Home News Articles Forum Contact About 导航栏 熟练使用导航栏,对于任何网站都非常重要. 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜 ...
- 24种设计模式--适配器模式【Adapter Pattern】
今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这个适配器能够把 ...
- IE6 for WIN8
分享一款微软原生内核的Ie6,绿色免安装,无广告,无插件. 点击下载IE6 for WIN8 来源:子涵的博客
- fedora22 无法联网的情况下rpm安装gcc5.1
前天发生件很不幸的事.我在给ubuntu14.04安装NVIDIA显卡驱动的时候,想清空下一个目录,什么目录我也忘了,当时我正好切到root身份(平常我很少切root的),命令格式如下 rm -fr ...