Quartz--Trigger
Trigger
Quartz中的触发器,用来告诉调度程序什么时候触发,即Trigger对象是用来触发Job的
触发器通用属性
JobKey
StartTime
EndTime
JobKey
表示job实例的表示.触发器被触发时,该指定的job实例会执行
StartTime 表示触发器额时间表首次被触发的时间
他的值的类型是Java.util.Date
EndTime
指定触发器的不再被触发的时间
他的值的类型是Java.util.Date
trigger通过builder模式创建

package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.Trigger; public class HelloJob implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间:" + sf.format(date));
Trigger currentTrigger = context.getTrigger();
System.out.println("任务开始时间:"+sf.format(currentTrigger.getStartTime()));
System.out.println("任务结束时间:"+sf.format(currentTrigger.getEndTime()));
JobKey jobKey = currentTrigger.getJobKey();
System.out.println("JobKey的分组名称:"+jobKey.getGroup()+"JobKey的名称:"+jobKey.getName());
} }
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
//获取距离当前时间3s之后的时间
date.setTime(date.getTime()+3000);//3s
//获取距离当前时间9s之后的时间
Date endDate = new Date();
endDate.setTime(endDate.getTime()+9000);
// 创建一个JobDetail实例,将该实例与HelloJobClass绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.build();
// 创建一个Trigger实例,定义该job立即执行,并每隔两秒钟执行一次,直到程序停止
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "group1")
.startAt(date)//表示在date的时间开始执行
.endAt(endDate)//表示最后的执行时间
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2).repeatForever()).build();
// 创建Scheduler实例
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
子类
SimpleTrigger
作用
在一个指定时间段内执行一次作业任务
或在指定的时间间隔内多次执行作业任务
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloJob implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间:" + sf.format(date));
System.out.println("Hello Word!");
} }
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
//获取距离当前时间4s之后的时间
date.setTime(date.getTime()+4000L);//4s
// 创建一个JobDetail实例,将该实例与HelloJobClass绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.build();
// 创建一个SimpleTrigger实例,在距离当前时间4s中后执行且只执行一次
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "group1")
.startAt(date)
.build();
// 创建Scheduler实例
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
//创建一个SimpleTrigger实例,在距离当前时间4s中后执行且每个两秒执行一次,执行3次
SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("mytrigger", "group1")
.startAt(date)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2).withRepeatCount(3)).build();
withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)
//执行无数次

CronTrigger
作用
基于日历的作业调度器
而不是像Simpletrigger 那样精确指定间隔时间,比SimpleTrigger更常用
(每月某天或者每周某天)
基于Cron表达式
Cron表达式
用于配置CronTrigger实例
是由7个子表达式组成的字符串,描述了时间表的详细信息
格式:[秒] [分] [时] [日] [月] [周] [年]
* 每


简单例子
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloJob implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("当前时间:" + sf.format(date));
System.out.println("Hello World");
} }
package cn.miye.web; 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.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
// 创建一个JobDetail实例,将该实例与HelloJobClass绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.build();
// 每年每周每月每天每时每分秒钟执行一次
CronTrigger trigger = (CronTrigger)TriggerBuilder
.newTrigger()
.withIdentity("mytrigger", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("* * * * * ? *"))
.build();
// 创建Scheduler实例
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
}
在线Cron表达式生成工具http://www.pdtools.net/tools/becron.jsp
Quartz--Trigger的更多相关文章
- Quartz Trigger Priority 触发器优先级
Quartz Trigger Priority 触发器优先级 当多个触发器在一个相同的时间内触发,并且调度引擎中的资源有限的情况下,那么具有较高优先级的触发器先触发. 需要将配置文件中的org.qua ...
- spring读书笔记----Quartz Trigger JobStore出错解决
将Quartz的JOBDetail,Trigger保持到数据库的时候发现,系统报错 The job (DEFAULT.jobDetail) referenced by the trigger does ...
- Quartz源码——JobStore保存JonDetail和Trigger源码分析(一)
我都是分析的jobStore 方式为jdbc的SimpleTrigger!RAM的方式类似分析方式! {0} :表的前缀 ,如表qrtz_trigger ,{0}== qrtz_ {1}:quartz ...
- Quartz(自动任务)中的触发器Trigger
1.Quartz中的触发器TriggerJob 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知.这个事情留给了 Trigger.Quartz Trigger 继承了抽象的 org.qua ...
- (转)Java任务调度框架Quartz入门教程指南(二) 使用job、trigger、schedule调用定时任务
http://blog.csdn.net/zixiao217/article/details/53044890 读完第一节,我们已经对Quartz有了一个大体的认识,它可以定时帮我们执行一些处理程序, ...
- 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger
前序: 我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...
- quartz任务调度基础: Job/Trigger/Schedule
1.Quartz基本用法 参见官方说明:[Quartz Job Scheduler] 三大核心元素: Job:定义要执行的任务 triggers:任务触发策略 scheduler:关联j ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- [Quartz笔记]玩转定时调度
简介 Quartz是什么? Quartz是一个特性丰富的.开源的作业调度框架.它可以集成到任何Java应用. 使用它,你可以非常轻松的实现定时任务的调度执行. Quartz的应用场景 场景1:提醒和告 ...
- Quartz —— 从 HelloWorld 开始
1.Quartz 是用来完成任务调度的. 2.Quartz 的三个核心概念:调度器.任务.触发器. (1)Job:通过实现该接口来定义需要执行的任务. public interface Job { / ...
随机推荐
- 进击的Python【第十章】:Python的高级应用(多进程,进程间通信,协程与异步,牛逼的IO多路复用)
Python的socket高级应用(多进程,协程与异步) 一.多进程multiprocessing multiprocessing is a package that supports spawnin ...
- AC自动机 HDOJ 2222 Keywords Search
题目链接 题意:每个文本串的出现次数 分析:入门题,注意重复的关键字算不同的关键字,还有之前加过的清零. 新模板,加上last跑快一倍 #include <bits/stdc++.h> ...
- 贪心 HDOJ 5385 The Path
题目传送门 /* 题意:给一张图和一些有向边,问如何给边赋值使得d1 < d2 < .. < dx > ,,,< ddn 贪心:左边从2开始,右边从n开始,每次选择未标记 ...
- HTML/XML转义字符对照表
HTML/XML转义字符对照表 HTML/XML转义字符对照表包含符号.数学符号.希腊字母 .重要的国际标志.ISO 8859-1 (Latin-1)字符集.特殊符号等. 1.特殊字符转义表 字符 十 ...
- GUI初步和frame&panel
java的话这个GUI其实不是什么重点,但我们也要学习,重点是学习这种图形编程的思路. java里面对于图形的一些类都封装在了AWT和它的一些子包里.AWT(抽象窗口开发包) 当 ...
- 436 Find Right Interval 寻找右区间
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”.对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着 ...
- 建造者模式以及php实现
建造者模式: 造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对 ...
- [Luogu1848][USACO12OPEN]书架Bookshelf DP+set+决策单调性
题目链接:https://www.luogu.org/problem/show?pid=1848 题目要求书必须按顺序放,其实就是要求是连续的一段.于是就有DP方程$$f[i]=min\{f[j]+m ...
- robotframework + python2.7.9 + selenium 2.44.0 + selenium2library1.7 测试环境搭建成功!
真心不容易呀!开源软件搭建挺麻烦的,各种组件未必要使用最新的版本:有些最新版本反而不兼容.需要仔细看官方说明书来进行搭建(官方网站都是英文),所以闹得重新安装了几次. 先上测试用例通过的图:
- linux下安装mysql5.7.21
下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz 解压 ...