`
p4nny
  • 浏览: 55145 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

quartz使用经验谈

 
阅读更多
在项目重构中,有一部分应用需要从autosys转移到quartz,由于平台差异性以及云计算环境下的集群控制,颇费周折。
1.使用自己的数据库连接池
quartz的集群必须使用数据库,而一般做法是在quartz中配置数据库的连接信息。但是项目里都是用的连接池呢,数据库不想给quartz单独开小灶,咋办呢?其实quartz也可以纳入数据库连接的统一管理的啦。首先写一个类,扩展org.quartz.utils.ConnectionProvider接口,实现getConnection方法
示例代码如下:
    public Connection getConnection() throws SQLException
    {
try
{
    java.sql.Connection con = null;
    con = ConnectionPool.getConnection(this.poolName);
    return con;
}
catch (Exception e)
{
    throw new SQLException("Could not get pool connection with name '" + poolName + "': " + e.getClass().getName()
    + ": " + e.getMessage());
}
    }
然后在quartz.properties中加上如下配置:
org.quartz.jobStore.dataSource = mydatasource
org.quartz.dataSource.mydatasource.connectionProvider.class = com.myjob.util.ConnectionPoolConnectionProvider
第一行定义的数据源名字就是第二行中间的那个,第二行定义的类名就是自己写的那个连接类,注意路径哈,这样就可以用我们自己的连接池了。

2.使用集群配置
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
这一句是指定jobstore,集群必须使用数据库,不能是org.quartz.simpl.RAMJobStore
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.isClustered = true
这一句配置指定使用集群,quartz的数据库脚本中有新建一个叫做QRTZ_LOCK的表,各job通过竞争这个表的行锁来取得执行权。

3.指定JOB覆盖
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
如果这个覆盖配置为false,quratz启动以后将以数据库的数据为准,配置文件的修改不起作用。这个配置很重要哈,姐被这个折腾了很久~~~配置的参数不起作用,加的listener不起作用,各种错啊,后来清了数据库才好。

4.JOB的参数配置
可以在JOB的定义文件里配置job-data-map来使job的参数配置化。配置文件如下:
      <job-detail>
         <name>MockJob</name>
         <group>JobGroup</group>
         <job-class>com.myjob.job.MockJob</job-class>
         <volatility>true</volatility>
         <durability>false</durability>
         <recover>false</recover>
         <job-listener-ref>myjobListener</job-listener-ref>
        <job-data-map allows-transient-data="true">
        <entry>
        <key>param1</key>
        <value>param-value1</value>
        </entry>
        </job-data-map>
      </job-detail>

读取参数的代码如下:
JobExecutionContext.getJobDetail().getJobDataMap().get("param1");
JobExecutionContext为JOB或者listener的参数

5.JOB的执行日志
找了quartz好像没找到执行记录,就是那种执行一次添加一条记录的表,没办法只好自己实现了。这个在listener里面做比较好,自己写一个listener的类,扩展org.quartz.JobListener接口,需要实现3个方法,我们在jobWasExecuted方法中,也就是job完成之后做记录,新建一张表,记录所需信息就好,job详情可以在JobExecutionContext.getJobDetail()中得到,具体实现略。

6.calendar
用于排除一些特使的节假日等,如何在配置中使用calender还没研究出来,待续
分享到:
评论
3 楼 seawavecau 2012-06-21  
原来是自己人。
2 楼 seawavecau 2012-06-21  
跟我碰到的问题一样,解决方法很类似。有没有关于box job的迁移方案。
1 楼 jacking124 2012-05-10  
不错的,米格,支持你。。

相关推荐

    quartz使用指南

    quartz使用指南,quartz使用指南,quartz使用指南

    spring的quartz使用实例

    以下是对Spring整合Quartz使用实例的详细说明: 1. **Quartz简介** Quartz是一个强大的、完全开源的作业调度框架,它支持复杂的调度策略,如按日期、时间间隔或自定义表达式执行。Quartz可以在Java应用中作为独立...

    Quartz使用小结

    这个小结将深入探讨Quartz的核心概念、使用场景以及如何与Spring框架集成。 一、Quartz简介 Quartz是由Caledonia Software公司开发的Java定时任务库,它提供了一种高度可配置的方式来安排和执行工作。Quartz支持...

    Quartz开发使用说明文档

    Quartz开发使用说明文档 Quartz是一个功能强大且广泛应用的开源作业调度框架,主要用于实现业务逻辑中的定时任务、批处理、事件触发等场景。Quartz的主要特点是高可用性、可扩展性、灵活配置、支持多种数据库和集群...

    Quartz 定时WebForm和WinForm使用的dll

    这个标题“Quartz 定时WebForm和WinForm使用的dll”暗示了我们将在WebForm和WinForm应用中使用Quartz来实现定时功能。在.NET环境中,Quartz通过引入特定的DLL文件来实现其功能。 首先,我们要理解什么是DLL...

    Quartz 线程池

    Quartz 是一个开源的作业调度框架,它允许开发者在 Java 应用程序中安排任务的执行。线程池是 Quartz 的核心组成部分,用于管理和执行触发的任务。本文将深入探讨 Quartz 线程池的工作原理、配置以及如何在实际项目...

    spring整合quartz使用jdbc存储

    Quartz本身支持多种持久化策略,包括使用数据库(JDBC)来存储作业和触发器信息,这使得任务调度信息在系统重启后仍能保留。下面将详细介绍如何进行Spring与Quartz的整合,以及使用JDBC存储的相关步骤。 1. **...

    关于spring中quartz的配置

    如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...

    JAVA定时器Quartz及使用说明

    二、Quartz的使用步骤 1. **初始化Scheduler**:首先,需要创建一个Scheduler实例,通常通过`StdSchedulerFactory.getDefaultScheduler()`方法获取。 2. **定义Job**:创建Job类,实现`Job`接口并重写`execute()`...

    Quartz使用详解

    Quartz 使用详解 Quartz 是一个功能强大的作业调度器,可以帮助开发者实现复杂的任务调度和执行。下面是关于 Quartz 使用详解的知识点总结。 一、实例化 Scheduler 在使用 Quartz 之前, 必须使用 ...

    Quartz使用指南

    8. **集成环境**:Quartz 可以在多种环境中使用,既可以作为独立应用程序,也可以作为 J2EE 应用服务器的组件。它还支持 RMI(远程方法调用)接口,便于远程管理和监控。 9. **灵活性**:Quartz 的灵活性体现在其...

    SpringQuartz的使用文档

    Spring对Quartz进行了集成,使其更易于在Spring应用程序中使用。Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理...

    spring+quartz使用jar包

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC...正确配置和使用这两个框架,能够为企业的后台服务带来极大的灵活性和可维护性。

    Quartz使用总结

    ### Quartz使用总结与详解 #### 一、Quartz概述 Quartz是一个开源的任务调度框架,主要功能在于能够根据用户自定义的时间规则来触发任务执行。Quartz提供了丰富的接口供开发者进行二次开发,使得任务调度变得非常...

    quartz-1.6.5使用手册

    Quartz 1.6.5 使用手册概述 Quartz 是一个功能强大且灵活的开源作业调度框架,广泛应用于各种企业级应用程序中。以下是 Quartz 1.6.5 使用手册的概述和相关知识点总结。 环境准备 在开始使用 Quartz 之前,需要...

    Quartz 定时任务web使用

    本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的核心概念和技术。 1. **Quartz基本概念** - **Job**:代表一个具体的任务,它定义了任务要执行的操作。 - **Trigger**:触发器,定义了任务何时开始...

    quartz使用例子

    ### Quartz使用例子详解 在Java领域,Quartz是一个强大的任务调度框架,被广泛应用于各种应用场景中,例如定时任务、事件处理等。本文将基于提供的代码片段,深入解析Quartz的使用方法,包括如何定义Job、配置...

    定时器quartz的使用方法

    本教程将详细讲解如何使用Quartz实现一个简单的定时器功能。 首先,我们需要引入Quartz的依赖库到项目中。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.quartz-scheduler ...

    quartz使用cron表达式的实例

    本文将深入探讨如何使用Quartz配合cron表达式来实现定时任务的实例。 首先,我们要理解cron表达式。Cron表达式是Unix系统中的定时任务调度工具,也被Quartz框架所采用。它由六个或七个子表达式组成,每个子表达式...

Global site tag (gtag.js) - Google Analytics