org.quartz.Scheduler 类层次

作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互。在你调用它的任何 API 之前,你需要知道如何创建一个 Scheduler 的实例。取而代之的是用了某个工厂方法来确保了构造出 Sheduler 实例并正确的得到初始化,Quartz 框架为这一目的提供了 org.quartz.SchedulerFactory 接口。角色 SchedulerFactory 就是用来产生 Scheduler 实例的。当 Scheduler 实例被创建之后,就会存到一个仓库中(org.quartz.impl.SchedulerRepository),这个仓库还提供了通过一个 class loader 查询实例的机制。要使用 Scheduler 实例,客户端必须从工厂(和随同的仓库中)使用不同方法调用来获取到它们。换句话说,要通过工厂创建一个 Scheduler 实例并获取到它需要经由两次方法调用。

所有的 Scheduler 实例应该由 SchedulerFactory 来创建

使用 DirectSchedulerFactory 构造实例方法代码如下:

DirectSchedulerFactory factory=DirectSchedulerFactory.getInstance();   
          try {   
              // Initialize the Scheduler Factory with 10 threads   
              factory.createVolatileScheduler(10);

// Get a scheduler from the factory   
              Scheduler scheduler = factory.getScheduler();

方法 createVolatileScheduler() 方法不会返回 scheduler 的实例。createXXX() 方法是告诉工厂如何配置要创建的 Scheduler 实例。你必须调用方法 getScheduler() 获取到在工厂上执行方法 createXXX() 产生的实例。实际上,在调用 getScheduler() 方法之前,你必须调用其中一个 createXXX() 方法;否则,你将有收到一个 SchedulerException 错误,因为根本没有 Scheduler 实例存在。
方法 createVolatileScheduler() 带有单个参数:要创建的线程数量。

使用 StdSchedulerFactory 构造一个调度器实例,具体使用方法如下:

StdSchedulerFactory factory = new StdSchedulerFactory();

// Create the properties to configure the factory   
          Properties props = new Properties();

// required to supply threadpool class and num of threads
          props.put(StdSchedulerFactory.PROP_THREAD_POOL_CLASS,"org.quartz.simpl.SimpleThreadPool");   
          props.put("org.quartz.threadPool.threadCount", "10");   
          try {

// Initialize the factory with properties   
              factory.initialize(props);

Scheduler scheduler = factory.getScheduler();

在这个例子中向工厂传递了两个属性,它们分别是实现了 org.quartz.spi.ThreadPool 接口的类名和 Scheduler 用来处理 Job 的线程的数量。这两个属性是必须的。但是我们也可以这样的得到实例

StdSchedulerFactory factory = new StdSchedulerFactory(); 
Scheduler scheduler = factory.getScheduler();

因为StdSchedulerFactory工厂类会有个方法initialize()自动去加载一些属性配置,假如你使用无参的initialize() 方法,StdSchedulerFactory会取classpath下找到quartz.properties并加载。默认不配置属性时候会自动加载quartz.properties文件的配置。

使用静态的 getDefaultScheduler() 方法创建 Scheduler

使用 StdSchedulerFactory 来创建 Scheduler 实例的方式很普遍,因此在 StdSchedulerFactory 直接提供了一个方便的静态方法 getDefaultScheduler(),它就是使用前面列出的几个步骤来初始化工厂的。

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

在静态方法 getDefaultScheduler() 方法中调用了空的构造方法。假如之前未调用过任何一个 initialize() 方法,那么无参的 initialize() 方法会被调用。这会开始去按照前面说的顺序加载文件。默认情况下,quartz.properties 会被定位到,并从中加载属性。

Scheduler 的功能

Scheduler除了启动外,Scheduler操作包括查询、设置 Scheduler 为 standby 模式、继续、停止。启动Scheduler非常简单,只需要调用 start() 方法即可。只有在Scheduler 有实例或standby 模式才能调用start() 方法,一旦调用shutdown() 方法之后就不能在调用start() 方法。

设置 Scheduler 为 standby 模式会导致 Scheduler 暂时停止查找 Job 去执行,public void standby() throwsSchedulerException; standby 模式,Scheduler 不再试图去执行 Job,因为那些搜寻要执行的 Job 的线程被暂停了下来。停止则调用无参的 shutdown() 方法相当于调用 shutdown(false).

Quartz定时任务学习(四)调度器相关推荐

  1. Quartz定时任务学习(一)简单任务

    学习quartz首先了解三个概念: 调度器:负责调度作业和触发器: 触发器:设置作业执行的时间.参数.条件等:(简单触发器和Cron触发器) 作业:定时任务内容,被执行的程序: 下载必要的jar包,直 ...

  2. 使用 GODEBUG 看调度跟踪,学习go调度器GMP

    让 Go 更强大的原因之一莫过于它的 GODEBUG 工具,GODEBUG 的设置可以让 Go 程序在运行时输出调试信息,可以根据你的要求很直观的看到你想要的调度器或垃圾回收等详细信息,并且还不需要加 ...

  3. Quartz定时任务学习(九)Quartz监听器

    Quartz 提供了三种类型的监听器:监听 Job 的,监听 Trigger 的,和监听 Scheduler 自已的. 本章解释如何应用每一种类型来更好的管理你的 Quartz 应用,并获悉到什么事件 ...

  4. SpringBoot中实现quartz定时任务

    Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...

  5. xxl-job源码解读(调度器调度执行器)

    一.执行器与调度器流程图 二.调度器调度执行器时序图 三.执行器接收到调度器的调度信息执行job时序图 四.调度器远程调用执行器部分代码片段 1.配置类实现InitializingBean接口,初始化 ...

  6. Quartz定时任务的使用

    Quartz 是一个功能丰富的开源作业调度库,Quartz 可用于创建简单或复杂的调度,以执行数十.数百甚至数万个作业:任务被定义为标准 Java 组件的作业,这些组件几乎可以执行任何您可以对其编程来 ...

  7. 如何编写Hadoop调度器

    1. 编写目的 在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器,然后在配置文件中指定相应的调度器,这样,当Hadoop集群启动时,便会加载该调度器.当前Hadoo ...

  8. Go调度器系列(4)源码阅读与探索

    各位朋友,这次想跟大家分享一下Go调度器源码阅读相关的知识和经验,网络上已经有很多剖析源码的好文章,所以这篇文章不是又一篇源码剖析文章,注重的不是源码分析分享,而是带给大家一些学习经验,希望大家能更好 ...

  9. 第十四课 k8s源码学习和二次开发原理篇-调度器原理

    第十四课 k8s源码学习和二次开发原理篇-调度器原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第十四课 k8s源码学习和二次开发原理篇-调度器原理 第一节 ...

最新文章

  1. 波士顿动力机器狗再进化:已学会自主规划路线
  2. TVB家族剧巅峰之作,郑少秋最后的辉煌,风头却被罗嘉良抢了
  3. php 打印oracle数组,ThinkPHP框架自身$map数组查询语言where条件对应oracle数据库时间戳查询方法...
  4. 嵌入式linux面试题库,嵌入式linux面试题解析(二)——C语言部分三
  5. MySQL数据库阶段学习目录
  6. 虚拟化技术、云计算服务模式、Docker安装
  7. jieba源码分析(一)
  8. 【VxWorks系列】任务间同步与通信之共享内存
  9. HorizontalListView中setSelection方法没有实现的数据刷新的解决方法
  10. sidirect 连接西门子_Intouch 与 CP343-1 通讯设置
  11. wⅰndows ISO文件备份,5 款 Windows 最佳备份软件
  12. 超频到3200最佳时序_攒啥电脑呢?笔记本内存也要超频?
  13. STEAM 教育相关书籍
  14. python 排列组合 数据量过大_Python 排列组合的实现
  15. 纯Javascript实现鼠标点击特效(烟花特效)
  16. java枚举处理工具
  17. Android 更换App图标
  18. C#Application.DoEvents();的作用。
  19. c语言输出我爱你程序,程序员表白教程,这些代码用过的都成功了!
  20. 联想计算机不能进入系统桌面,win10电脑开机后进不了系统桌面只有联想logo

热门文章

  1. [专业亲测]Ubuntu16.04安装Nvidia显卡驱动(cuda)--解决你的所有困惑【转】
  2. Mybatis【配置文件】就是这么简单
  3. 如何让网页不受电信114劫持
  4. Map容器大小影响key的索引
  5. Android Eclipse之Git插件安装、配置、提交、修改、冲突、查看历史、覆盖。
  6. 深入理解PHP内核(五)函数的内部结构
  7. Kubernetes v1.0特性解析
  8. HTTP的KeepAlive是开启还是关闭?
  9. 服务器端往手机端推送数据的问题(手机解决方案)
  10. java 抛异常给上级_java异常处理机制(示例代码)