认识Trigger

Quartz中的触发器是用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行Job的。

触发器的通用属性

JobKey:表示job实例的标识,触发器被触发时,该指定的job实例会执行。

StartTime:表示触发器的时间表首次触发的时间,值为util.Date。

EndTime:指定触发器的不再被触发的时间,值为util.Date。

实例如下

HelloScheduler类中的startAt(date)和endAt(endDate)

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("当前时间为:"+sf.format(date));

// 创建一个JobDetail实例,将实例与HelloJob绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)

.withIdentity("myJob", "ground1")

.build();

//获取距离当前时间3秒后的时间

date.setTime(date.getTime()+3000);

//获取距离当前时间6秒后的时间

Date endDate = new Date();

endDate.setTime(endDate.getTime()+6000);

// 创建一个Trigger实例,定义该Job立即执行,并且每隔两秒钟重复执行一次

Trigger trigger = TriggerBuilder

.newTrigger()

.withIdentity("myTrigger", "group1")

.startAt(date)//开始执行时间为当前时间的后3秒

.endAt(endDate)//停止执行的时间为当前时间的后6秒

.withSchedule(

SimpleScheduleBuilder.simpleSchedule()

.withIntervalInSeconds(2).repeatForever())

.build();

//创建Schedule实例

SchedulerFactory sFactory = new StdSchedulerFactory();

Scheduler scheduler = sFactory.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail,trigger);

}

}

HelloJob中获取了开始执行时间和结束执行时间。

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("开始时间为:"+currentTrigger.getStartTime());

System.out.println("结束时间为:"+currentTrigger.getEndTime());

JobKey jobKey = currentTrigger.getJobKey();

System.out.println("jobKeyName:"+jobKey.getName()+"jobGroup:"+jobKey.getGroup());

}

}

认识SimpleTrigger

在一个指定时间段内执行一次作业任务,或是在指定的时间间隔内多次执行作业任务。

实例一:距离当前时间4秒后执行且执行一次

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");

}

}

HelloScheduler类中代码如下

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("当前时间为:"+sf.format(date));

// 创建一个JobDetail实例,将实例与HelloJob绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)

.withIdentity("myJob", "ground1")

.build();

//距离当前时间4秒后执行且执行一次

date.setTime(date.getTime()+4000);

SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder

.newTrigger()

.withIdentity("myTrigger", "group1")

.startAt(date)

.build();

//创建Schedule实例

SchedulerFactory sFactory = new StdSchedulerFactory();

Scheduler scheduler = sFactory.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail,trigger);

}

}

实例二:距距离当前时间4秒后首次执行任务之后每隔两秒重复执行一次,在第一次执行再连续执行三次

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("当前时间为:" + sf.format(date));

// 创建一个JobDetail实例,将实例与HelloJob绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)

.withIdentity("myJob", "ground1").build();

// 距距离当前时间4秒后首次执行任务之后每隔两秒重复执行一次,在第一次执行再连续执行三次

date.setTime(date.getTime() + 4000);

SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder

.newTrigger()

.withIdentity("myTrigger", "group1")

.startAt(date)

.withSchedule(

SimpleScheduleBuilder

.simpleSchedule()

.withIntervalInSeconds(2)

.withRepeatCount(3))

.build();

// 创建Schedule实例

SchedulerFactory sFactory = new StdSchedulerFactory();

Scheduler scheduler = sFactory.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail, trigger);

}

}

实例三:距离当前时间4秒后首次执行,距离当前时间后6秒停止执行

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("当前时间为:" + sf.format(date));

// 创建一个JobDetail实例,将实例与HelloJob绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)

.withIdentity("myJob", "ground1").build();

// 距离当前时间4秒后首次执行,距离当前时间后6秒停止执行

date.setTime(date.getTime() + 4000);

Date endDate = new Date();

endDate.setTime(endDate.getTime()+6000);

SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder

.newTrigger()

.withIdentity("myTrigger", "group1")

.startAt(date)

.endAt(endDate)

.withSchedule(

SimpleScheduleBuilder

.simpleSchedule()

.withIntervalInSeconds(2)

.withRepeatCount(3))

.build();

// 创建Schedule实例

SchedulerFactory sFactory = new StdSchedulerFactory();

Scheduler scheduler = sFactory.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail, trigger);

}

}

注意

重复次数withRepeatCount:可以是0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值

重复执行间隔withIntervalInSeconds:必须为0或者长整数

指定了endAt参数,就会覆盖重复执行的效果

认识CronTrigger

基于日历的作业调度器,而不是像SimpleTrigger那样精确的指定时间间隔,比SimpleTrigger更常用。

Cron表达式

用于配置CronTrigger实例,是由7个子表达式组成的字符串,描述了时间表的详细信息,格式为:

[秒] [分] [小时] [日] [月] [周] [年]

实例一:使用CronTrigger 每秒钟触发一次任务

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("当前时间为:" + sf.format(date));

// 创建一个JobDetail实例,将实例与HelloJob绑定

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)

.withIdentity("myJob").build();

// 每秒执行一次任务

CronTrigger trigger = (CronTrigger) TriggerBuilder

.newTrigger()

.withIdentity("myTrigger", "group1")

.withSchedule(

CronScheduleBuilder.cronSchedule("* * * * * ? *"))

.build();

// 创建Schedule实例

SchedulerFactory sFactory = new StdSchedulerFactory();

Scheduler scheduler = sFactory.getScheduler();

scheduler.start();

scheduler.scheduleJob(jobDetail, trigger);

}

}

注意,表达式中的空格和英文状态

Cron表达式特殊字符意义对应表

image

Cron表达式举例

image

实例:

2017年内的每天10点15分触发一次

0 15 10 ? * * 2017

每天的14点整至14点59分55秒,以及18点整至18点59分55秒,每5秒钟触发一次

0/5 * 14,18 * * ?

通配符说明

image

Cron表达式

L和W可以一起使用,例如LW表示每个月的最后一个工作日

周字段英文字母不区分大小写

利用工具,在线生成百度搜索Crona表达式在线生成器

Scheduler-工厂模式

所有的Schedule实例应该有SchedulerFactory来创建,Quartz的三个核心概念是调度器,任务和触发器

关系如下:

image

Scheduler创建方式

SchedulerFactory sFactory = new StdSchedulerFactory();

Scheduler scheduler = sFactory.getScheduler();

DirectSchedulerFactory factory = DirectSchedulerFactory.getInstance();

Scheduler scheduler2 = factory.getScheduler();

StdSchedulerFactory

使用一组参数(Java.util.Properties)来创建和初始化Quartz调度器。

配置参数一般存储在quartz.properties中。

调用getScheduler方法就能创建和初始化调度器对象。

未完,待续

java quartz 触发_JavaEE进阶知识学习-----定时任务调度Quartz-2-触发器Trigger相关推荐

  1. 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  2. [附源码]Java计算机毕业设计SSM古诗词知识学习系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  3. mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目

    触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...

  4. mysql级联删除_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目

    触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...

  5. JAVA进阶知识学习-day10

    一.缓冲流 1.1 缓冲流,也叫高效流,是对4个基本的流的增强,按照数据类型分类:  字节缓冲流: BufferedInputStream,BufferedOutputStream  字符缓冲流: B ...

  6. java null转换jason_Java进阶知识,轻松理解Java泛型

    在学习泛型之前我们先回顾下Java的数据类型以及涉及到的一些概念. Java数据类型 Java的两大数据类型分为基础类型和引用类型.基本类型的数值不是对象,不能调用对象的toString().hash ...

  7. [译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory

    Quartz的设计是模块化的,所以要让它跑起来,得将各个模块组合起来使用.幸运的是,有些工具可以来帮我们做这些事. Quartz的主要模块有: ThreadPool,线程池 JobStore,任务仓库 ...

  8. Pandas 进阶知识学习

    文章目录 Pandas 进阶学习 导语 Pandas分组聚合 分组 Series系列分组 通过数据类型或者字典分组 获取单个分组 对分组进行迭代 聚合 应用单个聚合函数 应用多个聚合函数 自定义函数传 ...

  9. JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡

    Ribbon负载均衡 Ribbon概述 Spring Cloude Ribbon是基于Netfilx Ribbon实现的一套客户端 负载均衡的工具,简单说,Ribbon是Netfilix发布的开源项目 ...

  10. Java核心技术 卷1 基础知识 学习笔记——第三章 java的基本程序设计结构

    1. 一个正整数除以0的结果为正无穷大,0/0或者负数的平方根的结果为NaN(不是一个数字): if(x==Double.NaN)//is never true,所有非数值的值都认为是不同的 if(D ...

最新文章

  1. 数据挖掘十大经典算法之——C4.5 算法
  2. 作为一个有理想的程序员,必读的书都有哪些?
  3. 华为nova 8 Pro王者荣耀定制版曝光:内置小鲁班定制主题 电池盖镭雕小鲁班
  4. 架构部署001---双机集群(HA)系统
  5. CentOS新增硬盘系统不能自动进行识别。
  6. A Simple RESTful API Service With Node.js And Koa2
  7. 护网杯 task_shoppingCart 记录
  8. javascript实现浏览器窗口传递参数
  9. Arduino的详细介绍(基于Mega2560)(分文)——pinMode,digitalWrite/digitalRead()
  10. 运动目标检测之光流法(1):入门级了解
  11. 12省微生物繁殖,for循环模拟,12省,古堡算式全排列,12省鲁卡斯队列黄金比例比较,double精度12省填空题猜生日枚举,12省填空题土地测量,double12省填空题巧排扑克牌,12省汉诺塔
  12. java包是什么意思_java中的“包”到底是什么意思?
  13. 代码函数从零开始学习OpenCL开发(二)一个最简单的示例与简单性能分析
  14. H5一键复制 兼容iOS
  15. tkinter绘制组件(18)——菜单
  16. 极速PEu盘启动盘制作工具(2003内核)V06.6官方版
  17. 对待客户,除了服务要好以外,态度也一定要强硬
  18. Shell 编程入门(一)
  19. Android日志收集
  20. linux mint19.01 运行steam错误解决办法

热门文章

  1. 论文笔记_S2D.48_2017-IEEE RAL_单视图和多视图深度融合
  2. pcl学习之kd-tree
  3. 【Python3爬虫】网易云音乐歌单下载
  4. Yii2中自带分页类实现分页
  5. UVa140 - Bandwidth
  6. 构建之法1,5,17章学习心得
  7. python做一个http接口测试框架
  8. [Linux] 使用 SCP 指令,讓您傳送檔案至遠端、下載檔案
  9. 【Git/Github学习笔记】Git常用命令(推送到远程)
  10. 编程语言(C语言,JAVA),程序设计,APP开发,算法