`
1249479040qq
  • 浏览: 11142 次
  • 来自: 上海
社区版块
存档分类
最新评论

Spring Quartz_留作备份

阅读更多

原文:http://sassds.iteye.com/blog/1948098

spring定时器

在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等。
我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。
使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成,下面介绍它们集成方法和Cron表达式的详细介绍。

一、增加所依赖的JAR包
1、增加Spring的Maven依赖

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>


2、增加Quartz的Maven依赖

<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.4</version>
</dependency>

二、增加定时业务逻辑类

复制代码
publicclass ExpireJobTask {
/** Logger */
privatestaticfinal Logger logger = LoggerFactory.getLogger(ExpireJobTask.class);

/**
* 业务逻辑处理
*/
publicvoid doBiz() {
// 执行业务逻辑
// ........
}
}
复制代码


ExpireJobTask业务逻辑类与一般普通的类没有任务区别,它定义的doBiz方法即为调度业务方法。

三、增加Spring配置
1、增加一个线程池

复制代码
<!-- 线程执行器配置,用于任务注册 -->
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10"/>
<property name="maxPoolSize" value="100"/>
<property name="queueCapacity" value="500"/>
</bean>
复制代码


2、定义业务逻辑处理类

<!-- 业务对象 -->
<bean id="bizObject" class="com.aboy.potak.common.toolkit.scheduling.ExpireJobTask"/>


3、增加调度业务逻辑

<!-- 调度业务 -->
<bean id="jobDetail"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="bizObject"/>
<property name="targetMethod" value="doBiz"/>
</bean>


上面的配置中,我们以bizObject.doBiz方法为将要调度的业务执行逻辑。
4、增加调度触发器

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="cronExpression" value="10 0/1 * * * ?"/>
</bean>


Cron表达式“10 */1 * * * ?”意为:从10秒开始,每1分钟执行一次。

<bean id="taskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="startDelay" value="10000"/>
<property name="repeatInterval" value="60000"/>
</bean>


该调度表示,延迟10秒启动,然后每隔1分钟执行一次。
5、增加调度

复制代码
<!-- 设置调度 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
<property name="taskExecutor" ref="executor"/>
</bean>
复制代码


triggers属性中,我们可以增加多个触发器。

到此,Spring已经与Quartz完美的结合了,我们接下来的工作就是启动系统,开始调度了。

四、Cron表达式的详细用法
字段 允许值 允许的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小时 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可选) 留空, 1970-2099 , - * /

例子:
0/5 * * * * ? : 每5秒执行一次

“*”字符被用来指定所有的值。如:"*"在分钟的字段域里表示“每分钟”。 
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。 
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号来表明不想设置那个字段。

“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。

“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。

“/”字符用于指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。“5/15”在分钟域表示每小时的5,20,35和50。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。字符“/”可以帮助你在每个字符域中取相应的数值。如:“7/6”在月份域的时候只有当7月的时候才会触发,并不是表示每个6月。

L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。

字符“W”只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15好是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的。

“L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。

字符“#”只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。

字符“C”允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。

五、表达式举例
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2: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 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    quartzDaoImp.rar_quartz_spring定时_定时器

    本项目"quartzDaoImp.rar_quartz_spring定时_定时器"提供了一段基于Spring集成Quartz实现定时任务的代码示例,可供学习和交流。 首先,了解Quartz的基本概念。Quartz允许开发者定义“作业”(Job)和“触发器”...

    Spring_MongoDb_Quartz_Cluster:Spring_MongoDb_Quartz_Cluster

    Spring_MongoDb_Quartz_Cluster #这在mvn中央存储库中不可用。 com.novemberain quartz-mongodb 2.0.0-rc2 #然后,您必须在侧边项目标签crystal quartz-mongodb

    spring_quartz_定时任务

    《Spring与Quartz实现定时任务详解》 在Java开发中,定时任务的处理是一项重要的功能,它能够按照预设的时间规律自动执行特定的任务,比如数据同步、报表生成等。Spring框架,作为Java企业级应用的基石,提供了丰富...

    SpringQuartz的使用文档

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

    quartz_web

    这个"quartz_web.rar"文件很可能是包含了Quartz Web的示例项目,帮助开发者快速理解和应用Quartz Web。 Quartz的核心概念包括: 1. **Job**:工作,代表要执行的任务。一个Job类可以定义多个实例,每个实例对应一个...

    Quartz_API_1.65.zip_Quartz API_Quartz a_quartz 1.6.3 api_quartz

    在Quartz_API_1.65.chm文件中,你应该能找到详细的API文档,包括类的介绍、方法的使用示例和配置指南。这份文档将帮助你理解如何创建、调度和管理Jobs,以及如何设置和控制Triggers。此外,它还会涵盖如何配置Quartz...

    SpringMVC4_Spring4_Hibernate4_Proxool_Quartz2_Jackson_Plupload2集成与实例

    包含Spring4.1.1_SpringMVC4_Hibernate4.3.6_Proxool0.9.1_Quartz2.2.1_Jackson2.5.0_Plupload2.1.2的集成 包含集成完整实例代码,代码中具备详细中文注释。详情可参考博客: ...

    quartz_2.3.0 SQL脚本

    在执行前,建议备份现有数据库,以防数据丢失。一旦表创建成功,Quartz的配置文件(如`quartz.properties`)需要更新,指定数据库连接信息,并指向新创建的表。 Quartz 2.3.0版本可能包含了一些新的特性和改进,...

    Spring_QuartZDemo

    【Spring_QuartZDemo】是一个使用Spring框架集成Quartz定时任务的示例项目,它展示了如何在Java应用中利用Spring和Quartz实现任务调度。Quartz是Java领域一款功能强大的开源作业调度库,能够帮助开发者创建、调度和...

    Quartz_Job_Scheduling_Framework_V0.9.5

    Quartz_Job_Scheduling_Framework_V0.9.5版本是这个框架的一个重要版本,它包含了许多关键特性和功能,使得开发者能够轻松地在应用中实现复杂的调度需求。 首先,Quartz的核心概念包括Job(作业)、Trigger(触发器...

    spring quartz 表达式在线生成器

    标题中的“Spring Quartz 表达式在线生成器”是指一个工具,它可以帮助开发者方便地创建和测试Spring集成Quartz库时所需的定时任务表达式。Quartz是一个强大的、完全开源的作业调度框架,常用于Java应用中执行定时...

    spring3.0.5_quartz1.8.4_applicationContext

    spring定时任务quartz配置,applicationContext.xml

    spring Quartz的jar包

    Spring Quartz是Spring框架与Quartz任务调度库的集成,它为开发者提供了在Spring应用中进行任务调度的强大功能。Quartz是一个开源的作业调度框架,能够处理执行周期性任务的需求。在Java环境中,Spring Quartz使得...

    quartz_jta_collections

    在标题"quartz_jta_collections"中,我们看到与Quartz相关的三个关键组件:quartz-all-1.6.0.jar、jta-1.1.jar和commons-collections.jar。这些组件对于理解Quartz如何在分布式环境中运行以及它如何处理数据集合至关...

    FreePay_Quartz_aug_2008-源码.rar

    《FreePay_Quartz_aug_2008-源码》是针对一款名为FreePay的系统在2008年8月使用的定时任务框架Quartz的源代码集合。Quartz是一个开源的作业调度框架,广泛应用于Java环境中,用于创建、管理和执行计划任务。通过这个...

    spring_quartz项目可以直接运行

    **Spring Quartz 项目详解** **一、Spring Quartz 简介** Spring Quartz 是 Spring 框架与 Quartz 定时任务库的集成,它允许开发者在 Spring 应用程序中轻松地管理和执行定时任务。Quartz 是一个开源的作业调度...

    quartz_demo集合

    自己整理个一个quartz_demo集合,demo含CronTrigger方式、SimpleTrigger方式、spring集成CronTrigger方式、spring集成SimpleTrigger方式以及有状态作业方式。

    spring quartz定时任务demo

    在Java开发中,Spring框架与Quartz库的结合使用能够帮助开发者实现强大的定时任务功能。本文将详细解析“spring quartz定时任务demo”这个项目,它提供了实现Java定时任务的实例,便于快速理解和应用。 首先,...

Global site tag (gtag.js) - Google Analytics