`
Foxswily
  • 浏览: 77435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

总结几点Quartz的经验

阅读更多

总结一下经典的定时处理框架quartz的使用经验。基于 Ver. 1.8.0

  1.配置方式

        最常用的方式properties + xml定义

org.quartz.scheduler.instanceName = CMS_Batch
org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true

#默认会联网检查是否有更新,还是skip为好
org.quartz.scheduler.skipUpdateCheck = true
 

        properties定义全局信息(全局Listener也在这定义),xml定义Job、trigger信息

<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
    version="1.8">
    
    <pre-processing-commands>
        <delete-jobs-in-group>*</delete-jobs-in-group>  <!-- clear all jobs in scheduler -->
        <delete-triggers-in-group>*</delete-triggers-in-group> <!-- clear all triggers in scheduler -->
    </pre-processing-commands>
    
    <processing-directives>
        <overwrite-existing-data>true</overwrite-existing-data>
        <ignore-duplicates>false</ignore-duplicates> 
    </processing-directives>
    
    <schedule>
	    <job>
	        <name>FooJob</name>
            <group>FooBatch</group>
            <description>定时运行Job</description>
	        <job-class>xxx.yyy.FooJob</job-class>
	        <volatility>false</volatility>
            <durability>true</durability>
            <recover>false</recover>
	    </job>
	    <trigger>
	        <cron>
	            <name>FooTrigger</name>
	            <group>FooBatch</group>
	            <job-name>FooJob</job-name>
	            <job-group>FooBatch</job-group>
                <misfire-instruction>MISFIRE_INSTRUCTION_FIRE_ONCE_NOW</misfire-instruction>
	            <cron-expression>30/15 * 13 * * ?</cron-expression>
                <!-- 秒 分 时 日 月 星期 年 -->
	        </cron>
	    </trigger>
	    <job>
	        <name>barJob</name>
            <group>FooBatch</group>
            <description>无trigger的Job</description>
	        <job-class>xxx.yyy.barJob</job-class>
	        <volatility>false</volatility>
            <durability>true</durability>
            <recover>false</recover>
	    </job>
    </schedule>    
</job-scheduling-data>
 

        与J2ee容器结合,提供QuartzInitializerListener,可设定随容器自动启动,这个很方便

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <display-name>Foo Batch</display-name>

  <context-param>
    <param-name>quartz:config-file</param-name>
    <param-value>/quartz.properties</param-value>
  </context-param>

  <listener>
    <listener-class>
       org.quartz.ee.servlet.QuartzInitializerListener
    </listener-class>
  </listener>

  </web-app>
 

 

  2.Job、Trigger、Listener

        Job需要由Trigger启动,可以有多个Listener

        Trigger同样可以有多个Listener

 

  3.有待改进的地方

       Trigger不完善,只提供了“定时”Trigger,其他诸如基于Job完成与否或完成状态的Trigger需要自己靠Listener实现。

       配置不完善,配置文件只提供全局Listener定义,针对Job或Trigger的Listener要程序添加,另外1.8版本在配置无Trigger的Job时有bug(XMLSchedulingDataProcessor 1015行需要nullcheck),直接导致xml解析错误,感觉这自带的plugin还很简陋。

       plugin和Job同级别 ,(这个说法有点偏颇,但是产生的效果类似)这意味着在schedule启动前是不会解析配置文件的,只能在启动后调整Job等等内容,同时scheduler.getJobDetail取的Job是通过clone方式取得的,任何对Job的修改都无效...这个很无语 (clone的方式还是有道理的,已经设置好的Job不能随便改动)

scheduler.start(); //启动后读取配置文件等等

JobDetail fooJob = scheduler.getJobDetail("FooJob",
        "FooBatch");

fooJob.addJobListener(someListener);

//取Job对应的Trigger
Trigger[] triggers = scheduler.getTriggersOfJob(fooJob.getName(),
        fooJob.getGroup());

scheduler.addJob(fooJob, true); //true指明替换已有Job(没有关联Trigger)

//清除旧Trigger,重新建立Job和Trigger关联
for (Trigger trigger : triggers) {
    scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(), trigger);
} 
 

 

2
3
分享到:
评论

相关推荐

    Android studio下的quartz工程

    在Android中使用Quartz需要注意以下几点: - **主线程限制**:由于Android对主线程的操作有严格限制,所有耗时操作应放在后台线程执行,避免阻塞UI。 - **生命周期管理**:确保在应用启动时启动调度器,并在退出时...

    对Quartz的简单封装

    在对Quartz进行封装时,博主可能实现了以下几点: 1. **配置简化**:可能创建了一个配置类,用于集中管理Quartz的相关配置,如数据库连接、JobStore类型(内存或持久化存储)、线程池大小等,使得配置过程更加直观...

    quartz 集群解决方法

    在Quartz中实现集群,主要涉及到以下几个关键点: 1. **持久化存储**: Quartz集群需要将所有调度信息(如Job、Trigger)存储在一个共享的持久化存储中,以便所有集群节点都能访问。这通常通过实现`...

    Spring集群整合Quartz

    Quartz提供了几种集群策略: - RAMJobStore:不适用于集群,因为它只在内存中存储job和trigger,重启后会丢失。 - JDBCJobStore:推荐在集群环境中使用,将job和trigger的状态存储在数据库中,多台服务器共享同一份...

    quartz 调用两次任务

    然而,如果一个任务被意外地调度了两次,那么可能的原因有以下几点: 1. **代码逻辑错误**:可能是代码中创建了两个相同的 Job 和 Trigger 组合,或者在代码中错误地调用了 `scheduler.scheduleJob()` 方法两次。 ...

    Quartz集群配置和示例源码

    总结,Quartz集群配置涉及到数据库、配置文件、Job和Trigger的定义,以及集群监听器的设置。通过这些配置,可以实现任务的高可用性和并发控制,提高系统的整体稳定性。示例源码通常会展示如何创建Job、Trigger,以及...

    Quartz - 作业调度框架

    在实际项目中,我们还会关注以下几个关键点: 1. **集群支持**:Quartz支持在多台服务器上分布式部署,确保高可用性和任务的不丢失。 2. **持久化**:Quartz支持将Job和Trigger的信息存储在数据库中,即使服务重启,...

    mysql+quartz

    总结一下,"mysql+quartz"的主题涵盖了以下几个关键知识点: 1. Quartz Scheduler的基本概念和用法,包括Job和Trigger的定义。 2. 如何配置Quartz使用MySQL作为持久化存储,利用JDBCJobStore。 3. Spring框架与...

    spring-quartz

    总结来说,Spring与Quartz的集成主要涉及以下几个核心知识点: 1. 引入Quartz和Spring相关依赖 2. 配置SchedulerFactoryBean以启动Quartz调度器 3. 定义JobDetail和Trigger,包括任务的执行类、方法和执行时间 4. 将...

    spring整合quartz常见问题

    ### Spring整合Quartz常见问题详解 ...然而,在实践中也可能会遇到各种问题,如本文中列举的几点常见问题及其解决方案。通过合理的配置和优化,可以有效避免这些问题的发生,确保任务调度的稳定性和可靠性。

    quartz异步消息任务跟踪

    总结来说,Quartz异步消息任务跟踪涉及到以下几个关键点: 1. 自定义`Job`类,实现业务逻辑。 2. 使用消息中间件进行异步消息发送。 3. 利用`JobDataMap`存储和跟踪任务状态。 4. 设计合适的`Trigger`策略以满足调度...

    spring2.0 job Quartz 和Time一样的定时任务

    比较Spring 2.0的`Job`和Quartz,我们可以总结以下几点差异: 1. 灵活性:Quartz提供了更丰富的定时策略,如CRON表达式,而Spring 2.0的`Job`通常适用于简单的定时需求。 2. 复杂性:Quartz的配置和使用相比Spring ...

    Quartz2D图形刷新和定时器

    为了获得更好的性能和用户体验,需要注意以下几点优化: 1. 减少不必要的重绘:避免在整个视图上频繁调用`setNeedsDisplay`,而是尽可能精确地指定需要更新的区域。 2. 使用CADisplayLink:对于需要与屏幕刷新同步...

    Spring中Quartz调度器的使用 示例代码

    总结一下,Spring结合Quartz调度器的使用主要包括以下几个步骤: 1. 引入Quartz和Spring支持的依赖。 2. 配置Spring的ApplicationContext,创建Scheduler、Job和Trigger。 3. 编写执行定时任务的服务类。 4. 根据...

    Quartz使用详解

    下面是关于 Quartz 使用详解的知识点总结。 一、实例化 Scheduler 在使用 Quartz 之前, 必须使用 SchedulerFactory 实例化 Scheduler。实例化 Scheduler 后,可以启动或停止 Scheduler。注意,一旦 Scheduler ...

    spring-quartz-021

    2. **配置Quartz**:在Spring的配置文件(如applicationContext.xml)中,我们需要声明一个`SchedulerFactoryBean`,它是Spring管理Quartz调度器的入口点。这里可以设置Quartz的相关属性,如数据库连接、线程池大小...

    quartz 时间配置规则.doc

    #### 五、总结 通过本文档的学习,我们可以看到 Quartz 的 Cron 表达式是一种非常灵活且强大的工具,能够满足各种复杂的定时任务需求。掌握 Cron 表达式的正确使用方法对于实现精准的任务调度至关重要。无论是简单的...

    Spring线程时间配置:Quartz和CronExpression

    在Spring中配置Quartz主要包括以下几个步骤: 1. **添加依赖**: 如果使用Maven或Gradle管理项目依赖,需要添加Quartz的相关依赖。 2. **创建SchedulerFactoryBean**: 这是Quartz的核心组件,负责创建和管理...

    Spring中Quartz的配置[总结].pdf

    下面我们将详细介绍如何在Spring中配置Quartz,以及相关的知识点。 首先,我们需要创建一个被调度的类,这个类通常会包含一个或多个方法,这些方法将在特定时间由Quartz执行。例如,在给定的代码中,我们有一个名为...

    quartz.doc

    这通常涉及以下几点: - **Servlet 定义**:定义一个用于初始化 Quartz 的 Servlet 类。 - **初始化参数**:指定 Quartz 的配置文件位置等。 - **加载顺序**:设置 `load-on-startup` 属性来确保在应用启动时自动...

Global site tag (gtag.js) - Google Analytics