`

Spring与Quartz使用说明

 
阅读更多

Quartz官方网址:http://www.quartz-scheduler.org/ 

集成方法

集成起来比较简单,对线程无需任何理解,Spring手册上也有清楚的说明。只需写一个POJO,其余的都是配置,而且若使用CronTriggerBean,可以配置很复杂的任务调度。

1.编写一个普通的JAVA类

根据业务,写一个简单的JAVA类,和普通的类没有区别。并配置到Spring配置文件上中。例:

 <bean id="vcSMSProcessService" class="com.sinoprof.vc.sms.service.impl.MessageProcessServiceImpl">

        <property name="vcSMSLocalDAO" ref="vcSMSLocalDAO"/>

        <property name="vcSMSOAService" ref="vcSMSOAService"/>

        <property name="vcSMSConfig" ref="vcSMSConfig"/>

        <property name="vcSMSGateWayService" ref="vcSMSGateWayService"/>

    </bean>

2.使用MethodInvokingJobDetailFactoryBean建立任务

只需要配置即可,配置信息示例如下:

<bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

        <property name="targetObject">

            <ref bean="vcSMSProcessService"/>

        </property>

        <property name="targetMethod">

            <value>sendMessages</value>

        </property>

        <property name="concurrent">

            <value>false</value>

        </property>

</bean>

 

说明:

targetObject

目标对象,即需要定时执行的POJO

targetMethod

目标方法,即需要定时执行的POJO方法

concurrent

默认情况下,Quartz Jobs是无状态的,可能导致jobs之间互相的影响,如果你为相同的JobDetail指定两个Trigger,很可能当第一个job完成之前,第二个job就开始了。如果Jobdetail实现了Stateful接口,就不会发生这样的事情。第二个job将不会在第一个job完成之前开始。为了使得jobs不并发运行,设置concurrent标记为false

 

3.使用CronTriggerBean建立规则,调度任务

<bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

        <property name="jobDetail">

            <ref bean="jobTask"/>

        </property>

        <property name="cronExpression">

            <value>0 0/5 8-18 ? * 2-6 *</value>

        </property>

    </bean>

 

说明:

jobDetail

任务详情,即所需要调度的任务

cronExpression

调用规则,即什么时候调用。详细说明见附录1

 

4.使用SchedulerFactoryBean包装任务

<bean id="startQuartz" lazy-init="false" 

          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref bean="jobTrigger"/>

            </list>

        </property>

        <property name="autoStartup" value="true"/>

        <property name="schedulerName" value="cronScheduler"/>

    </bean>

 

说明:

triggers

触发器,调用哪些任务

autoStartup

是否自动启动,该Bean被初始化后是否自动启动定时任务。

Set whether to automatically start the scheduler after initialization. 

schedulerName

给这个计划设定一个名称。

Set the name of the Scheduler to fetch from the SchedulerFactory. 

 

更多使用细节可以参考Spring文档和Quartz文档

附录1:CronTrigger说明

如果需要复杂的任务计划调度,像日历样式的任务,而不是简单的时间间隔调度,需要使用CronTrigger,SimpleTrigger满足不了需求。

用CronTrigger,你可以定义任务计划像“每周五的中午”,或“每个工作日的早上9:30”,甚至可以定义“1月份的每周一、周三、周五早上9:00至10:00,每5分钟一次”。

虽然如此,像SimpleTrigger一样,CronTrigger仍有startTime属性定义计划的开始时间,endTime(可选)属性定义计划的中止时间。

Cron Expressions

Cron-Expressions是用来配置CronTrigger实例。Cron-Expressions是由七段子表达式组成的字符串描述各个细节计划。这些子字符串由空格分开,每个子字符串表示一个域,分别为:

1 秒

2 分

3 时

4 几号

5 月份

6 星期几

7 年(可选域)

例如:"0 0 12 ? * WED"-表示每周三12:00:00pm"。

其中每个独立的子表达式都可以用范围或者列表表示。例如:

前例的”WED“也可以写成:

"MON-FRI"(范围表示)

"MON,WED,FRI"(列表表示)

"MON-WED,SAT"(范围加列表)

通配符(*)可以用来表示某个子表达式域的每一个可能的值。因此,“*”号用在月份里,表示每月。用在星期几里,表示一周中的每天。

每个子表达式域都有一组有效的值,这些值都是显然意见的。例:用0-59表示秒和分,用0到23表示小时。几号用0-31中的任何值,但是要小心每月的天数。月份指定的值应该是0至11,也可以用字符串 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV和DEC表示。星期几用1到7表示(1=星期天),或用英文字符表示:SUN,MON,TUE,WED,THU,FRI和SAT。

字符“/”用来表示增量的值。例如:如果用“0/15”表示分,就表示从一个小时的0分开始,在这小时内每隔15分钟一次。如果用"3/20"表示分,则表示从一个小时的3分开始,在这小时内每隔20分钟一次。也可以用“3,23,43”表示。注意"*/35"并不是表示每35分钟,而是表示从一个小时的0分开始,每隔35分钟一次,相当于"0,35"。

“?"号允许用在几号和星期几的子字符串域中,用来说明没有指定值。

“L字符允许用在几号和星期几域中,是"last"的缩写。“L”用在几号里意思是这个月的最后一天,如果是1月就指31号,如果是闰年的2月就是28号。如果用在星期几里,他就是表示“7”或者“SAT”(星期六)。但是如果L用在一个值的后面联合表示星期几域,就表示“这个月最后一个星期几”。例如:“6L”或“FRIL”表示这个月的最后一个星期五。同样也可以用一个偏移变量表示距离某个月最后一天的天数。例如:“L-3”表示某月最后一天的倒数第三天。但用“L“字符时,不要将“L”用在列表或范围中,那样你会混淆或者获得不是预期的结果。

“W”用来指定某一号最近的工作日(星期一至五),例如:“15W”放在几号里,表示这个月15号最近的一个工作日。

“#”号用指定某月第几个工作日,例如:“6#3”或“FRI#3”放在星期几域中,表示这个月第三个星期五。

下面是一些表达式的样例,你可以从JavaDoc中找到更多的例子。

Cron Expressions示例

例1-一个表达式表示每5分钟。

"0 0/5 * * * ?"

例2——表示每分钟的10秒后,每5钟一次(如:10:00:10 am,10:05:10 am,等等)

"10 0/5 * * * ?"

例3——表示运行在每个星期三,星期五的10:30,11:30,12:30 and 13:30

"0 30 10-13 ? * WED,FRI"

例4——表示每月的5号和20号的早8点至早10点每30分钟一次。

"0 0/30 8-10 5,20 * ?"

注意,有些计划调度需求如果用一个触发器会很复杂,例如:“早9:00至10:00每5分钟,下午1:00至10:00每20分钟”,这种情况下可以是单的创建两个触发器同时运行一个JOB

分享到:
评论

相关推荐

    spring的quartz使用实例

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

    spring-quartz定时设置详细说明

    以下是对 "spring-quartz 定时设置详细说明" 的详细解释。 一、Quartz 简介 Quartz 是一个开源的作业调度框架,可以用来创建、调度和执行任务。它支持复杂的调度策略,如按时间间隔执行、在特定日期执行等。Quartz ...

    spring quartz 表达式在线生成器

    2. **Spring与Quartz集成**:介绍如何在Spring应用中配置Quartz,包括使用`@EnableScheduling`注解开启调度,以及如何定义`@Scheduled`注解的任务。 3. **Cron表达式**:详细讲解Cron表达式的组成部分和语法,以及...

    spring-quartz定时任务小实例

    2. **Spring与Quartz集成**:Spring提供了对Quartz的集成功能,允许通过Spring的配置来管理Job(任务)和Trigger(触发器)。这包括自动初始化Scheduler,以及通过Spring的依赖注入(DI)来管理Job的生命周期。 3. ...

    spring_quartz项目可以直接运行

    "springquartz—项目可以直接运行" 这个压缩包中,通常会包含以下部分: 1. **pom.xml**:Maven 项目配置文件,包含了 Spring 和 Quartz 相关依赖。 2. **src/main/java**:源代码目录,可能包含自定义的 Job 类、...

    spring-quartz所需jar包

    7. **JDBC Driver**: 如果Quartz使用数据库存储Job和Trigger信息,那么需要相应的JDBC驱动,例如MySQL、Oracle、PostgreSQL等,以便与数据库进行交互。 8. **Commons Logging**: 作为日志抽象层,Commons Logging...

    Spring任务调度配置及说明(spring+quartz)

    在Java开发中,任务调度是不可或缺的一部分,Spring框架提供了与Quartz集成的能力,使得我们可以方便地管理和执行定时任务。本文将详细介绍如何通过Spring和Quartz搭建任务调度系统,并解析配置文件中的关键组件及其...

    spring中quartz定时任务实例及配置说明

    通过这种方式,Spring与Quartz的集成使得我们可以方便地在Java应用中添加定时任务,而无需关心底层的调度细节。这种灵活性和可扩展性使得Quartz成为许多企业级应用的首选定时任务解决方案。 总结起来,Spring中的...

    Quartz开发使用说明文档

    Quartz可以与Spring框架集成,以便使用Spring的依赖注入和AOP功能。Quartz也支持Hibernate框架,以便使用Hibernate的ORM功能。 applicationContext-sproc.xml applicationContext-sproc.xml是Quartz的配置文件,...

    cs端的java-spring-quartz框架

    为了更好地利用这个框架,开发者需要对Spring和Quartz有深入的理解,包括它们的基本概念、配置方式以及API的使用。同时,还需要了解如何将两者结合,以实现高效的任务调度。对于`readme.txt`中的内容,开发者应仔细...

    Spring中Quartz任务调度器cronexpression配置说明

    ### Spring中Quartz任务调度器cronexpression配置说明 在现代软件开发中,特别是Java应用程序领域,定时任务的执行是常见的需求之一。Spring框架通过集成Quartz这一强大的任务调度库,为开发者提供了灵活、高效的...

    quartz+spring集成完整开发,富含文档说明

    将Quartz与Spring集成可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性,使任务调度变得更加灵活和易于管理。这样的集成可以帮助开发者在SSH(Struts、Spring、Hibernate...

    spring-quartz

    【标题】"spring-quartz" 是一个将Spring框架与Quartz定时任务库集成的应用实践,旨在实现定时任务的动态管理。在企业级应用中,定时任务的管理是必不可少的,例如执行数据同步、报表生成、清理过期数据等。通过...

    quartz与spring集群Demo

    针对Quartz与Spring做集群的Demo实例,主要解决了Quartz的JOB序列化问题。 源代码说明: support pkg:扩展Spring与Quartz集成的不足之处。 core pkg: 是自身调度业务的封装 实例运行依赖Oracle数据库,根据quartz...

    基于spring-boot+quartz的CRUD任务管理系统源码+项目说明.zip

    基于spring-boot+quartz的CRUD任务管理系统源码+项目说明.zip基于spring-boot+quartz的CRUD任务管理系统源码+项目说明.zip基于spring-boot+quartz的CRUD任务管理系统源码+项目说明.zip基于spring-boot+quartz的CRUD...

    一个Spring+quartz的例子,希望对大家有帮助

    Spring+quartz 一个简单的 定时任务的例子,希望能对大家的学习有帮助。 最后,附:cronExpression配置说明 字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - *...

    Spring配置Quartz

    demo中主要实现了Spring与Quartz的结合使用。其中哟两种配置方式,一种是任务pojo方式,另一种是集成Sprihng中的QuartzBean,实际上是实现了Job接口,具体的操作信息在相应的博客中有说明。

    spring定时任务quartz.jar

    Spring框架与Quartz结合使用,可以实现灵活的、可扩展的定时任务管理。在"quartz-all-1.6.0.jar"中,包含了Quartz的核心库和其他必要的组件,允许开发者在Spring应用上下文中配置和管理定时任务。 在Spring中集成...

    Quartz+spring实例应用

    这对于初学者来说是非常有价值的,因为它提供了一个现成的环境来实践和理解Quartz与Spring的集成。 总的来说,通过这个实例应用,开发者可以学习到如何在Spring环境中利用Quartz进行任务调度,理解Spring如何管理...

    quartzDaoImp.rar_quartz_spring定时_定时器

    Spring框架则提供了对Quartz的集成,使得在Spring应用中配置和使用Quartz变得更加方便。本项目"quartzDaoImp.rar_quartz_spring定时_定时器"提供了一段基于Spring集成Quartz实现定时任务的代码示例,可供学习和交流...

Global site tag (gtag.js) - Google Analytics