`

spring Quartz配置

    博客分类:
  • JAVA
阅读更多

Quartz

    Quartz是一个完全由java编写的开源作业调度框架.

    Quartz最主要的功能就是调度器(完成定时任务),可以与javaEE或者javaSE应用程序相结合也可以单独使用。

    Quartz能借助关系数据库和JDBC作业存储支持集群,负载均衡。

 

需要的jar包:

spring.jar
quartz-1.6.1.jar
commons-logging.jar
commons-collections.jar
log4j-1.2.15.jar 

 

Spring Quartz

    Spring中继承并简化了Quartz, 我们可以通过配置Spring简化Quartz的配置。

在ApplicationContext.xml配置数据源,并且引入ApplicationContext-quartz.xml文件。

ApplicationContext.xml:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/publicdb"></property> 
</bean>
                    .
                    .
                    .
                    .
<!--  import  -->
<import resource="ApplicationContext-quartz.xml" />

 

 

ApplicationContext-quartz.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<!-- 在<Beans>中设置default-autowire="byName"的属性,不能通过Bean名称自动注入,必须通过明确引用注入 -->
<beans default-autowire="byName">
    <!-- 要调用的工作类 -->
    <bean id="reportCreateJob" class="org.quartz.JobDetail">
        <property name="jobClass">
            <value>com.hundsun.u3c.reportserver.quartz.job.ReportCreateJob</value>
        </property>
        <property name="name" value="reportCreate-processor-job" />
    </bean>
    <!-- 定义触发时间 -->
    <bean id="reportCreateTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="reportCreateJob" />
        </property>
        <property name="cronExpression">
            <value>0 * * * * ?</value>
        </property>
    </bean>
    <!-- 管理类:配置Schedule信息,与spring容器的生命周期建立联系等功能 -->
    <bean id="scheduler"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 在SchedulerFactoryBean初始化完成后,延迟300秒启动Scheduler,以便让Spring能够更快初始化容器中剩余的Bean。--> 
        <property name="startupDelay" value="300" />
        <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
        <property name="quartzProperties">
            <props>
                <prop key="org.quartz.scheduler.instanceName">qmsQuartzScheduler</prop>
                <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
                <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
                <prop key="org.quartz.threadPool.threadCount">3</prop>
                <prop key="org.quartz.threadPool.threadPriority">5</prop>
                <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
                <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
                <prop key="org.quartz.jobStore.driverDelegateClass">${QUARTZ_DRIVERDELEGATECLASS}</prop>
                <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>
                <prop key="org.quartz.jobStore.tablePrefix">U3C_QRTZ_</prop>
                <prop key="org.quartz.jobStore.isClustered">true</prop>
                <prop key="org.quartz.jobStore.clusterCheckinInterval">20000</prop>
            </props>
        </property>
        <!-- scheduler by QuartzAdjust -->
        <property name="triggers">
            <list>
                <ref bean="reportCreateTrigger" />
            </list>
        </property>
    </bean>
</beans>

 

JobDetail: 可以使用Quartz的JobDetail在Spring中配置一个JobDetail Bean,但是JobDetail使用带参的构造函数。[public void execute(JobExecutionContext arg0)]

也可以使用JobDetailBean,Spring通过扩展JobDetail提供了一个更具Bean风格的JobDetailBean。此外,Spring提供了一个MethodInvokingJobDetailFactoryBean,通过这个FactoryBean可以将Spring容器中Bean的方法包装成Quartz任务,这样开发者就不必为Job创建对应的类。

 

CronTriggerBean调度器:每到指定时间则触发一次。与之相对的还有SimpleTriggerBean调度器,每隔指定时间则触发一次。

属性解释:

  1.jobDetail:对应的JobDetail.

  2.cronExpression:Cron表达式,后面详解。

 

SchedulerFactoryBean是Spring继承Quartz而提供的类。
Scheduler和Spring容器的生命周期相关联。Spring容器启动后,Scheduler自动开始工作,而在Spring容器关闭前,自动关闭Scheduler。Scheduler在Spring容器的生命周期完成自动启动和关闭的操作。
SchedulerFactoryBean功能:
  1.以更具Bean风格的方式为Scheduler提供配置信息。
  2.让Scheduler和Spring容器的生命周期建立关联,相生相息。
  3.通过属性配置部分或全部代替Quartz自身的配置文件。

参数解释:

  1.dataSource: 当需要使用数据库来持久化任务调度数据时,你可以在Quartz中配置数据源,也可以直接在Spring中通过dataSource指定一个Spring管理的数据源。如果指定了该属性,即使quartz.properties中已经定义了数据源,也会被此dataSource覆盖。

  2.startupDelay:在SchedulerFactoryBean初始化完成后,延迟启动Scheduler,以便让Spring能够更快初始化容器中剩余的Bean。

  3.quartzProperties:类型为Properties,允许你在Spring中定义Quartz的属性。其值将覆盖quartz.properties配置文件中的设置,这些属性必须是Quartz能够识别的合法属性。在配置时你可以需要查看Quartz的相关文档。

  4.transactionManager:可以通过该属性设置一个Spring事务管理器。在设置dataSource时,Spring强烈推荐你使用一个事务管理器,否则数据表锁定可能不能正常工作。

 

JobDetailBean:

 * @author jiangbo
 * 
 */
public class ReportCreateJob implements StatefulJob {

  private static Logger log = Logger.getLogger(ReportCreateJob.class);

  @Override
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
    log.debug("===into quartz job =======>");
    ReportCreateBusiness.getInstance().createReport();
  }
}

 

Quartz的集群配置

org.quartz.scheduler.instanceName属性可为任何值,用在 JDBC JobStore 中来唯一标识实例,但是所有集群节点中必须相同。

org.quartz.scheduler.instanceId属性为AUTO即可,基于主机名和时间戳来产生实例ID。

org.quartz.jobStore.isClustered设置为"true"激活集群特性

org.quartz.jobStore.class属性为JobStoreTX,将任务持久化到数据中。因为集群中节点依赖于数据库来传播Scheduler实例的状态,你只能在使用JDBC JobStore时应用Quartz集群。这意味着你必须使用JobStoreTX或是JobStoreCMT作为Job存储。你不能在集群中使用RAMJobStore。

org.quartz.jobStore.clusterCheckinInterval属性定义了Scheduler实例检入到数据库中的频率(单位:毫秒)。Scheduler检查是否其他的实例到了它们应当检入的时候未检入。这能指出一个失败的Scheduler实例,且当前 Scheduler会以此来接管任何执行失败并可恢复的Job。通过检入操作,Scheduler 也会更新自身的状态记录。clusterChedkinInterval越小,Scheduler节点检查失败的Scheduler实例就越频繁。默认值是15000 (即15秒)。

dataSource:项目中用到的数据源,里面包含了quartz用到的12张数据库表。

applicationContextSchedulerContextKey:org.springframework.scheduling.quartz.SchedulerFactoryBean这个类中把spring上下文以key/value的方式存放在了quartz的上下文中了,可以用applicationContextSchedulerContextKey所定义的key得到对应的spring上下文.

configLocation:用于指明quartz的配置文件的位置.

 

Quartz集群12张表

 

表名 描述
QRTZ_CALENDARS 以Blob类型存储Quartz的Calendar信息.
QRTZ_CRON_TRIGGERS 存储Cron Trigger,包括Cron表达式和时区信息.
QRTZ_FIRED_TRIGGERS 存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息.
QRTZ_PAUSED_TRIGGER_GRPS 存储已暂停的Trigger组的信息。
QRTZ_SCHEDULER_STATE 存储少量的有关Scheduler的状态信息,和别的cheduler 实例(假如是用于一个集群中)
QRTZ_LOCKS 存储程序的非观锁的信息(假如使用了悲观锁)。
QRTZ_JOB_DETAILS 存储每一个已配置的Job的详细信息。
QRTZ_JOB_LISTENERS 存储有关已配置的JobListener的信息。
QRTZ_SIMPLE_TRIGGERS 存储简单的Trigger,包括重复次数,间隔,以及已触的次数。
QRTZ_BLOG_TRIGGERS Trigger作为Blob类型存储(用于Quartz用户用JDBC创建他们自己定制的Trigger类型,JobStore并不知道如何存储实例的时候)
QRTZ_TRIGGER_LISTENERS 存储已配置的TriggerListener的信息.
QRTZ_TRIGGERS 存储已配置的Trigger的信息.

 QRTZ_TRIGGERS表中TRIGGER_STATE字段显示任务的属性:

  WAITING:等待  
  PAUSED:暂停 
  ACQUIRED:正常执行 
  BLOCKED:阻塞 
  ERROR:错误

 

Cron表达式

Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成。

Cron表达式时间字段:

 

位置 时间域名 允许值 允许的特殊字符
1 0-59 , - * /
2 分钟 0-59 , - * /
3 小时 0-23 , - * /
4 日期 1-31 , - * ? / L W C
5 月份 1-12 , - * /
6 星期 1-7 , - * ? / L C #
7 年(可选) 空值1970-2099 , - * /

 

Cron表达式示例:

 

表达式 说明
"0 0 12 * * ? " 每天12点运行
"0 15 10 * * ?" 每天10:15运行
"0 15 10 * * ? 2011" 2011年的每天10:15运行
"0 * 14 * * ?" 每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。
"0 0/5 14 * * ?" 每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。
"0 0/5 14,18 * * ?" 每天14点到15点每5分钟运行一次,此外每天18点到19点每5钟也运行一次。
"0 0-5 14 * * ?" 每天14:00点到14:05,每分钟运行一次。
"0 10,44 14 ? 3 WED"

3月每周三的14:10分到14:44,每分钟运行一次。

"0 15 10 ? * MON-FRI" 每周一,二,三,四,五的10:15分运行。
"0 15 10 15 * ?" 每月15日10:15分运行。
"0 15 10 L * ?" 每月最后一天10:15分运行。
"0 15 10 ? * 6L" 每月最后一个星期五10:15分运行。
"0 15 10 ? * 6L 2007-2009" 在2007,2008,2009年每个月的最后一个星期五的10:15分运行。
"0 15 10 ? * 6#3" 每月第三个星期五的10:15分运行。

 

 

分享到:
评论
2 楼 溪山行旅 2015-03-02  
              
1 楼 hadestage 2014-07-04  
您好,
1.您的那个配置文件里的38行的${QUARTZ_DRIVERDELEGATECLASS}是什么意思呢? 可以直接用还是还需要个配置项?
2. 39行的那个sql又是有什么用意呢,还有里面的{0}?
谢谢!

相关推荐

    Spring Quartz如何动态配置时间

    Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,广泛应用于 Java 企业级应用程序中。其中一个重要的功能便是动态配置时间,触发相应的任务。在本文中,我们将讨论如何使用 Spring Quartz...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Spring 中的 Quartz 配置-Spring 定时器-java 定时器 在 Spring 框架中,Quartz 是一个非常流行的开源作业调度器,可以实现任务的定时执行。在本篇文章中,我们将讨论如何在 Spring 中配置 Quartz,以实现 Java ...

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    spring quartz 表达式在线生成器

    通常,这样的示例会包含Spring配置文件(如`applicationContext.xml`或`application.yml`)、Java配置类、定时任务类(实现`org.quartz.Job`接口)以及触发器配置(使用`org.quartz.Trigger`)。 总的来说,了解和...

    spring多个定时任务quartz配置

    2. **配置Spring**:在Spring的配置文件(如applicationContext.xml)中,我们需要配置一个SchedulerFactoryBean,这是Spring管理Quartz Scheduler的主要方式。示例配置如下: ```xml ...

    spring Quartz的jar包

    在Java环境中,Spring Quartz使得我们可以方便地管理和配置定时任务,而无需深入理解Quartz的复杂配置。 首先,我们来看一下提供的jar包: 1. `spring.jar`:这是Spring框架的核心库,包含了Spring的核心组件,如...

    关于spring中quartz的配置

    以下将详细介绍如何在Spring中配置Quartz以及相关知识点。 1. **引入依赖** 在开始配置之前,首先需要在项目的`pom.xml`或`build.gradle`文件中引入Quartz和Spring相关的依赖库。对于Maven项目,可以添加如下依赖...

    Spring quartz

    2. **Spring Quartz配置** - **XML配置**:在Spring配置文件中,我们可以通过`&lt;bean&gt;`标签定义Job和Trigger,然后通过`&lt;bean&gt;`或`&lt;jee:jndi-lookup&gt;`引用Scheduler工厂。 - **Java配置**:Spring Boot项目中,可以...

    spring-quartz配置

    spring-quartz的标准配置文件

    spring quartz定时任务demo

    总的来说,“spring quartz定时任务demo”提供了一个直观的教程,帮助开发者理解如何在Spring项目中配置和使用Quartz进行定时任务的创建和管理。通过这个例子,你可以快速学习到如何定义Job,如何配置Trigger,以及...

    转:spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...

    spring+quartz demo

    在 Spring 的配置文件(如 `applicationContext.xml`)中,我们需要引入 Quartz 的配置,并声明一个 `SchedulerFactoryBean` 来实例化和配置 Quartz Scheduler。这通常包括定义数据源、JobDetail 和 Trigger。 2. ...

    spring quartz相关jar包(多版本)

    关于标签"springquartz jar包",这表明这些 jar 文件是专门为整合 Spring 和 Quartz 而准备的。Spring 提供了对 Quartz 的支持,使得开发者可以通过 Spring 的 XML 配置或者注解方式声明和管理 Quartz 调度器,简化...

    Spring Quartz Demo

    2. **Spring对Quartz的支持**:Spring提供了一个名为`org.springframework.scheduling.quartz`的模块,该模块使得Quartz可以无缝集成到Spring应用中,简化了配置和任务的管理。 3. **配置Quartz in Spring**:在...

    spring quartz集群配置

    Spring Quartz 集群配置详解 在分布式系统中,定时任务的管理往往是一个重要的环节,Spring与Quartz的结合能够帮助我们实现复杂的工作调度。Quartz是一个开源的作业调度框架,它提供了高度可配置的定时任务执行能力...

    Spring Quartz定时任务 jar包

    1. **Spring集成Quartz**:Spring为Quartz提供了声明式配置,可以在Spring的XML配置文件中定义Job(任务)和Trigger(触发器)。Job是实际执行的任务,而Trigger则规定了何时执行Job。Spring会自动管理和调度这些Job...

    springQuartz.zip

    这个项目的核心在于如何使用Spring管理Quartz定时任务的配置和执行。让我们深入了解一下相关知识点: 1. **Quartz简介**:Quartz是开源的作业调度框架,它允许应用程序定义和调度任务,以便在特定的时间点或按照...

    spring quartz

    结合Spring框架,Spring Quartz 提供了更简洁的配置和集成方式,使得在企业级应用中实现定时任务变得更加方便。 首先,我们需要理解Spring Quartz的核心概念: 1. **Job**:Job是执行的具体任务,实现了`org....

    spring 配置quartz需要的jar包

    在Java开发中,Spring框架与Quartz库的集成可以实现灵活且强大的定时任务管理。Spring提供了与Quartz的无缝整合,...同时,注意在生产环境中,可能还需要考虑集群环境下的Quartz配置,确保任务的正确执行和避免冲突。

    spring集成quartz集群配置

    本文将深入探讨如何在Spring环境中集成Quartz以实现集群配置,以便于在分布式环境中进行高效的任务调度。 首先,理解Spring集成Quartz的核心在于Spring的Job接口和Quartz的Scheduler。Spring提供了`org.spring...

Global site tag (gtag.js) - Google Analytics