`
liumayulingyan
  • 浏览: 154665 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Quartz定时任务学习(四)调度器

 
阅读更多

转载:http://hi.baidu.com/xulin_1027/item/5ae34598568fb388581461f5

 

org.quartz.Scheduler 类层次

QuartzFigure4.2.JPG

作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互。在你调用它的任何 API 之前,你需要知道如何创建一个 Scheduler 的实例。取而代之的是用了某个工厂方法来确保了构造出 Sheduler 实例并正确的得到初始化,Quartz 框架为这一目的提供了 org.quartz.SchedulerFactory 接口。角色 SchedulerFactory 就是用来产生 Scheduler 实例的。

当 Scheduler 实例被创建之后,就会存到一个仓库中(org.quartz.impl.SchedulerRepository),这个仓库还提供了通过一个 class loader 查询实例的机制。要使用 Scheduler 实例,客户端必须从工厂(和随同的仓库中)使用不同方法调用来获取到它们。换句话说,要通过工厂创建一个 Scheduler 实例并获取到它需要经由两次方法调用。

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

QuartzFigure4.3.JPG

使用 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() throws SchedulerException; standby 模式,Scheduler 不再试图去执行 Job,因为那些搜寻要执行的 Job 的线程被暂停了下来。停止则调用无参的 shutdown() 方法相当于调用 shutdown(false).

分享到:
评论

相关推荐

    ASP.NET使用Quartz.NET实现定时任务调度

    结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...

    quartz 定时任务调度

    Quartz 提供了一套丰富的 API 和支持,可以方便地与 Spring 框架集成,实现灵活的定时任务调度。 在 Spring 中集成 Quartz,首先需要创建一个 Java 类作为定时任务的执行体,例如 `MyJob` 类。这个类通常包含一个...

    C# 控制台Quartz定时任务.doc

    【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    java quartz 定时任务

    Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...

    定时任务quartz实现分组串行并行动态配置

    Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...

    Quartz定时任务表达式

    ### Quartz定时任务表达式详解 在探讨Quartz定时任务表达式的使用之前,我们先了解下Quartz是什么。Quartz是一个开源的作业调度框架,能够触发在指定时间运行的任务,广泛应用于Java应用程序中进行定时任务的管理。...

    Quartz3.0定时任务学习之异步调度器.zip

    Quartz3.0定时任务学习之异步调度器

    Quartz定时任务框架

    总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...

    C# Quartz.Net定时任务操作明细、完整过程

    注意,所有任务调度器创建完成后,只需要调用一次`Start()`。 **注意事项**: - **异常处理**:由于Quartz.Net的单线程特性,`Execute`方法中的异常可能不会被编译器捕获。因此,建议对重要执行代码使用`try-catch`...

    Quartz定时任务常用的11张数据库脚本表结构

    这里我们将详细探讨Quartz定时任务在数据库中的11张核心表结构。 1. **QRTZ_JOB_DETAILS**:此表存储所有Job的详细信息,如Job类名、Job数据映射等。每个Job实例在此表中对应一条记录,Job的唯一标识由`SCHED_NAME`...

    Quartz定时任务简单列子

    这个"Quartz定时任务简单列子"可能是一个简单的教程或者示例项目,用于展示如何在Java应用中集成和使用Quartz来执行预定的任务。 Quartz的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是...

    Spring quartz 定时任务调度

    Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...

    quartz定时任务调度

    Quartz定时任务调度是Java平台上广泛使用的开源作业调度框架,它允许开发者定义并执行复杂的调度任务,例如定期执行某些业务逻辑或系统维护操作。在基于Web的开发环境中,Quartz可以很好地集成到Spring等框架中,...

    Quartz 定时任务web使用

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...

    分布式quartz定时任务学习

    分布式Quartz定时任务学习是现代企业级应用中一个重要的技术领域,尤其是在大数据处理、系统维护、数据同步等场景下,其重要性不言而喻。Quartz是一个开源的作业调度框架,它允许开发者定义和执行复杂的任务调度策略...

    quartZ定时任务.zip

    SpringBoot与Quartz的集成使得在微服务环境中实现定时任务变得非常便捷。下面将详细介绍如何利用Quartz在SpringBoot项目中创建、管理和停止定时任务,并根据业务需求配置cron表达式来设定执行周期。 1. **Quartz...

Global site tag (gtag.js) - Google Analytics