quartz---的Scheduler
quartz---的Scheduler
从这副图中可以很直观的看出来quartz的关系:
调度:Scheduler任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。
触发器:Trigger 触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多,本文主要介绍这种方式。CronTrigger在spring中封装在CronTriggerFactoryBean中。
1)scheduler.start();scheduler.standby();用代码解释:
- package com.imooc.demo.helloQuartz;
- 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, InterruptedException {
- Date date = new Date();
- SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println("Current Time is:"+sf.format(date));
- // 创建一个jobDatail实例,将该实力与helloJob绑定
- JobDetail detail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob")
- .build();
- //美每秒触发一次任务
- CronTrigger trigger = (CronTrigger)TriggerBuilder
- .newTrigger()
- .withIdentity("myTrigger", "group1")
- //2017-2019每月的第二周的星期5下午14开始触发,每隔5秒允许一次
- .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
- .build();
- // 创建Scheduler实例
- SchedulerFactory factory = new StdSchedulerFactory();
- Scheduler scheduler = factory.getScheduler();
- scheduler.start();
- // 把jobDetail和Trigger与scheuler绑定在一起:触发启动
- System.out.println("----:"+sf.format(scheduler.scheduleJob(detail, trigger)));;
- Thread.sleep(2000L);
- //挂起
- scheduler.standby();
- //scheduler挂起3秒后继续执行
- Thread.sleep(3000L);
- scheduler.start();
- }
- }
每秒执行一次,2秒后停止,执行3次后停止执行,运行结果:
2)shutdown();
- package com.imooc.demo.helloQuartz;
- 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, InterruptedException {
- Date date = new Date();
- SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println("Current Time is:"+sf.format(date));
- // 创建一个jobDatail实例,将该实力与helloJob绑定
- JobDetail detail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob")
- .build();
- //美每秒触发一次任务
- CronTrigger trigger = (CronTrigger)TriggerBuilder
- .newTrigger()
- .withIdentity("myTrigger", "group1")
- //2017-2019每月的第二周的星期5下午14开始触发,每隔5秒允许一次
- .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
- .build();
- // 创建Scheduler实例
- SchedulerFactory factory = new StdSchedulerFactory();
- Scheduler scheduler = factory.getScheduler();
- scheduler.start();
- // 把jobDetail和Trigger与scheuler绑定在一起:触发启动
- System.out.println("----:"+sf.format(scheduler.scheduleJob(detail, trigger)));;
- Thread.sleep(2000L);
- //挂起
- scheduler.shutdown();
- //scheduler挂起3秒后继续执行
- Thread.sleep(3000L);
- scheduler.start();
- }
- }
运行结果为:
总结 :
在shutdown()后,程序不能再从新start().
- package com.imooc.demo.helloQuartz;
- 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, InterruptedException {
- Date date = new Date();
- SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println("Current Time is:"+sf.format(date));
- // 创建一个jobDatail实例,将该实力与helloJob绑定
- JobDetail detail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob")
- .build();
- //美每秒触发一次任务
- CronTrigger trigger = (CronTrigger)TriggerBuilder
- .newTrigger()
- .withIdentity("myTrigger", "group1")
- //2017-2019每月的第二周的星期5下午14开始触发,每隔5秒允许一次
- .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
- .build();
- // 创建Scheduler实例
- SchedulerFactory factory = new StdSchedulerFactory();
- Scheduler scheduler = factory.getScheduler();
- scheduler.start();
- // 把jobDetail和Trigger与scheuler绑定在一起:触发启动
- System.out.println("----:"+sf.format(scheduler.scheduleJob(detail, trigger)));;
- Thread.sleep(2000L);
- //shutdown(true)标志等待所有正在执行的job执行完之后,再关闭scheduler
- //shutdown(false)即shutdown()表示job执行完毕之后,再关闭scheduler
- //shutdown挂起3秒后继续执行
- scheduler.shutdown(true);
- System.out.println("scheruler is shut down?:"+scheduler.isShutdown());
- }
- }
运行结果:
总结 :
shutdown(true)标志等待所有正在执行的job执行完之后,再关闭scheduler
总结 :
shutdown(false)即关闭scheduler ,然后执行job之后,关掉程序
quartz---的Scheduler的更多相关文章
- Quartz —— Spring 环境下的使用
一.在 Spring 环境下 Quartz 的使用超级简单. 二.具体使用 1.添加对应的 spring-quartz 的配置文件. 2.新建要执行定时任务的目标类和目标方法,不需要继承 Job 接口 ...
- spring Quartz 调度
Quartz 是开源任务调度框架中的翘首,它提供了强大任务调度机制,同时保持了使用的简单性.Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射.此外,Quartz ...
- Quartz与Spring整合进行热部署的实现(一)
先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的 ...
- Quartz.Net 调度框架配置介绍
在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等.大家通过windows计划任务,windows服务等都实现过此类任务,甚至实现过自己的配置定制化的框架.那今天 ...
- Spring + Quartz配置实例
Spring为创建Quartz的Scheduler.Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处.此外Spring还提供了一些便 ...
- 使用configuration配置结束在quartz.net中使用硬编码Job,Trigger任务提高灵活性
经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说 Quartz,它具有功能强大和应用的灵活性,我想使用过的人都 ...
- quartz学习笔记(一)简单入门
前言 quartz是Java编写的一款开源的任务调度开发框架,在项目开发中很多场景都可以用到,比如订单超期自动收货. 所谓程序源于生活,生活中也有很多场景可以用quartz来模拟,比如工作日早上七点起 ...
- Quartz源码——QuartzSchedulerThread.run() 源码分析(三)
QuartzSchedulerThread.run()是主要处理任务的方法!下面进行分析,方便自己查看! 我都是分析的jobStore 方式为jdbc的SimpleTrigger!RAM的方式类似分析 ...
- 【59】Quartz+Spring框架详解
什么是Quartz Quartz是一个作业调度系统(a job scheduling system),Quartz不但可以集成到其他的软件系统中,而且也可以独立运行的:在本文中"job sc ...
- spring-boot-2.0.3之quartz集成,不是你想的那样哦!
前言 开心一刻 晚上回家,爸妈正在吵架,见我回来就都不说话了,看见我妈坐在那里瞪着我爸,我就问老爸“你干什么了惹我妈生这么大气?” 我爸说“没有什么啊,倒是你,这么大了还没有媳妇,要是你有媳妇给我们 ...
随机推荐
- Python Web学习笔记之socket编程
Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...
- c++性能之map实现性能比较
http://www.cnblogs.com/zhjh256/p/6346501.html讲述了基本的map操作,在测试的时候,发现map的性能极为低下,与java相比相差了接近200倍.测试的逻辑如 ...
- 散列表(HashTable)
散列表 i. 散列函数 i. 冲突解决 ii. 分离链表法 ii. 开放地址法 iii. 线性探测法 iii. 平方探测法 iii. 双散列 ii. 再散列 ii. 可扩散列 i. 装填因子:元素个数 ...
- 20165310java_blog_week7
2165310 <Java程序设计>第7周学习总结 教材学习内容总结 通过JDBC管理数据库 原理图: 链接数据库方式 - `Connection getConnection(java.l ...
- MySQL命令行导出、导入数据库,备份数据库表
MySQL导出数据库/数据表 1.首先,将你MySQL安装目录,例如C:\Program Files\MySQL\MySQL Server 5.7\bin添加到你的系统环境变量PATH中: 2.导出数 ...
- linux 安装MySql 5.7.20
1.下载文件(https://pan.baidu.com/s/1c1VBcHy)放到目录:/usr/local/ 2.解压 cd /usr/local/ tar -zxvf mysql-5.7.20- ...
- HDU 6071 Lazy Running(很牛逼的最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=6071 题意: 1.2.3.4四个点依次形成一个环,现在有个人从2结点出发,每次可以往它相邻的两个结点跑,求最后回 ...
- React Native 之 定义的组件 (跨文件使用)
哈哈的~~~今天介绍的是自定义组件 然后去使用这个组件,让这个组件传递这各种文件之间 哈哈 下面开始吧!!!! 我们所要创建的是一个自定义的Button,先创建一个js文件起名为MyButton, ...
- Java I/O学习 文件读写工具
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import jav ...
- 关于Java中System.gc() 与System.runFinalization()
System.gc : 告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的.只是建议进行回收 System.runFinalization(): 网上搜了一下很多人都说强制调用已经失 ...