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的更多相关文章

  1. Quartz —— Spring 环境下的使用

    一.在 Spring 环境下 Quartz 的使用超级简单. 二.具体使用 1.添加对应的 spring-quartz 的配置文件. 2.新建要执行定时任务的目标类和目标方法,不需要继承 Job 接口 ...

  2. spring Quartz 调度

    Quartz 是开源任务调度框架中的翘首,它提供了强大任务调度机制,同时保持了使用的简单性.Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射.此外,Quartz ...

  3. Quartz与Spring整合进行热部署的实现(一)

    先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的 ...

  4. Quartz.Net 调度框架配置介绍

    在平时的工作中,估计大多数都做过轮询调度的任务,比如定时轮询数据库同步,定时邮件通知等等.大家通过windows计划任务,windows服务等都实现过此类任务,甚至实现过自己的配置定制化的框架.那今天 ...

  5. Spring + Quartz配置实例

    Spring为创建Quartz的Scheduler.Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处.此外Spring还提供了一些便 ...

  6. 使用configuration配置结束在quartz.net中使用硬编码Job,Trigger任务提高灵活性

    经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说 Quartz,它具有功能强大和应用的灵活性,我想使用过的人都 ...

  7. quartz学习笔记(一)简单入门

    前言 quartz是Java编写的一款开源的任务调度开发框架,在项目开发中很多场景都可以用到,比如订单超期自动收货. 所谓程序源于生活,生活中也有很多场景可以用quartz来模拟,比如工作日早上七点起 ...

  8. Quartz源码——QuartzSchedulerThread.run() 源码分析(三)

    QuartzSchedulerThread.run()是主要处理任务的方法!下面进行分析,方便自己查看! 我都是分析的jobStore 方式为jdbc的SimpleTrigger!RAM的方式类似分析 ...

  9. 【59】Quartz+Spring框架详解

    什么是Quartz Quartz是一个作业调度系统(a job scheduling system),Quartz不但可以集成到其他的软件系统中,而且也可以独立运行的:在本文中"job sc ...

  10. spring-boot-2.0.3之quartz集成,不是你想的那样哦!

    前言 开心一刻 晚上回家,爸妈正在吵架,见我回来就都不说话了,看见我妈坐在那里瞪着我爸,我就问老爸“你干什么了惹我妈生这么大气?”  我爸说“没有什么啊,倒是你,这么大了还没有媳妇,要是你有媳妇给我们 ...

随机推荐

  1. 深入理解Java虚拟机 #01# 自己编译JDK

    x 首先用书上的脚本尝试,失败. 之后根据源文件的 README 编译,抛出: root@linux:/opt/openjdk# sh ./get_source.sh ERROR: Need init ...

  2. canvas压缩图片

    1.canvas.toDataUrl压缩图片 canvas的toDataUrl方法可以将内容导出为base64编码格式的图片,采用base64编码将比源文件大1/3,但是该方法可以指定导出图片质量,所 ...

  3. hystrix两种隔离模式分析

    hystrix隔离模式目前有两种方式:信号量模式和线程池模式. 但信号量并不支持超时,当被调服务发生问题时,有少部分用户会长时间无法得到响应. 另外,使用线程池模式无法传递Header,我估计是由于线 ...

  4. json获取元素数量

    var keleyijson={"plug1":"myslider","plug2":"zonemenu"} funct ...

  5. .NET MVC请求流程

    ASP.NET MVC 请求流程:Controller MvcHandler Action Action参数赋值 .NET MVC权限设计思考之切入点

  6. 事务(Transaction)

    1.演示转账的功能:(1)创建一张表示学生表表 CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50), ac ...

  7. 用python + hadoop streaming 编写分布式程序(三) -- 自定义功能

    又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧 相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍 ...

  8. axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项

    在用axis2生成服务端文件和客户端文件,当客户端文件调用服务端文件时,都是通过wsdl文件生成的 配置文件进行相互的调用. 在一开始做开发测试的时候,通过soapUI进行调用接口的时候,可以调用成功 ...

  9. 【TCP/IP详解 卷一:协议】第四章 ARP:地址解析协议 以及其他部分的一些知识

    4.1 引言 数据链路 如以太网(Ethernet) 或者 令牌环网 都有自己的寻址机制(一般为 48 bit 的地址). 一个网络(数据链路层) 可以同时被多个不同的网络使用.比如,一组使用TCP/ ...

  10. 不在同一主机:vsftpd+pam+mysql

    配置环境:Centos7上的mariadb + Centos6上的vsftpd 一.安装所需要程序 1.安装vsftpd和pam_mysql(在centos6-->192.168.108.160 ...