`
greenwen
  • 浏览: 219756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring 定时器(Timer,Quartz)

阅读更多
在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz。
1.Java Timer定时

第一步:继承java.util.TimerTask类实现run方法
import java.util.TimerTask; 
public class EmailReportTask extends TimerTask{ 
    @Override 
    public void run() { 
        ... 
    }   
}


第二步:在Spring定义
<bean id="reportTimerTask" class="EmailReportTask">...</bean> 

第三步:配置定时器
<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
<property name="timerTask" ref="reportTimerTask" /> 
<property name="period"> 
    <value>86400000</value>
</property> 
</bean> 

timerTask属性告诉ScheduledTimerTask运行哪个
86400000代表24个小时

第四步:启动定时器
Spring的TimerFactoryBean负责启动定时任务
<bean class="org.springframework.scheduling.timer.TimerFactoryBean"> 
<property name="scheduledTimerTasks"> 
   <list><ref bean="scheduleReportTask"/></list> 
</property> 
</bean>
 

scheduledTimerTasks里显示一个需要启动的定时器任务的列表。
 
<bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
<property name="timerTask" ref="reportTimerTask" /> 
<property name="period"> 
    <value>86400000</value> 
</property> 
<property name="delay"> 
    <value>3600000</value> 
</property> 
</bean> 

可以通过设置delay属性延迟启动
这个任务我们只能规定每隔24小时运行一次,无法精确到某时启动

2.Quartz定时器

第一步:继承QuartzJobBean类实现executeInternal方法
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 
import org.springframework.scheduling.quartz.QuartzJobBean; 

public class EmailReportJob extends QuartzJobBean{ 
protected void executeInternal(JobExecutionContext arg0) 
throws JobExecutionException { 
... 
} 
}
 

第二步:在Spring中定义
<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
<property name="jobClass"> 
  <value>EmailReportJob</value> 
</property> 
<property name="jobDataAsMap"> 
    <map> 
        <entry key="courseService"> 
            <ref bean="courseService"/> 
         </entry> 
    </map> 
</property> 
</bean> 

在这里我们并没有直接声明一个EmailReportJob Bean,而是声明了一个JobDetailBean。这个是Quartz的特点。JobDetailBean是Quartz的org.quartz.JobDetail的子类,它要求通过jobClass属性来设置一个Job对象。
使用Quartz的JobDetail中的另一个特别之处是EmailReportJob的courseService属性是间接设置的。JobDetail的jobDataAsMap属性接受一个Map,包括设置给jobClass的各种属性,当。JobDetailBean实例化时,它会将courseService Bean注入到EmailReportJob 的courseService 属性中。

第三步:配置定时器
Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean与scheduledTimerTasks类似。指定工作的执行频度,模仿scheduledTimerTasks配置
<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
<property name="jobDetail" ref="reprotJob" /> 
<property name="startDelay"> 
   <value>360000</value> 
</property> 
<property name="repeatInterval"> 
    <value>86400000</value> 
</property> 
</bean>
 

startDelay也是延迟1个小时启动
CronTriggerBean指定工作的准确运行时间
<bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
<property name="jobDetail" ref="reprotJob" /> 
<property name="cronExpression"> 
   <value>0 0 6 * * ?</value> 
</property> 
</bean> 

属性cronExpression告诉何时触发。最神秘就是cron表达式:
Linux系统的计划任务通常有cron来承担。一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
字段   允许值  允许的特殊字符
秒     0-59     , - * / 
分     0-59     , - * / 
小时     0-23     , - * / 
日期     1-31     , - * ? / L W C 
月份     1-12 或者 JAN-DEC     , - * / 
星期     1-7 或者 SUN-SAT     , - * ? / L C # 
年(可选)     留空, 1970-2099     , - * /

从左到右:
1.秒2.分3.小时4.月份中的日期(1-31)5.月份(1-12或JAN-DEC)6.星期中的日期(1-7或SUN-SAT)7.年份(1970-2099)
每个元素都显示的规定一个值(如6),一个区间(9-12),一个列表(9,11,13)或一个通配符(*)。因为4和6这两个元素是互斥的,因此应该通过设置一个问号(?)来表明不想设置的那个字段,“/”如果值组合就表示重复次数(10/6表示每10秒重复6次)。

附表达式意义:
"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触发


第四步:启动定时器
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
       <list><ref bean="cronReportTrigger"/></list> 
    </property> 
</bean>
 

triggers属性接受一组触发器
分享到:
评论

相关推荐

    Spring定时器实例(Java的Timer类和OpenSymphony的Quartz)

    Spring两种定时器实例配置:Java的TimerTask类和OpenSymphony的Quartz。包含5种配置方式:timer普通定时器、timer特定方法定时器、quartz简单定时器、quartz精确定时器、quartz特定方法定时器。简单实用,一看就会。

    spring定时器-quartz开发的步骤

    首先,理解Spring定时器的基础概念。Spring提供了两种定时任务框架:`java.util.Timer`和`@Scheduled`注解。然而,对于复杂的企业级应用,Quartz更具有优势,因为它支持集群、灵活的调度策略和丰富的API。 1. **...

    Spring 使用Timer quartz区别

    在处理定时任务时,Spring提供了两种常见的解决方案:`java.util.Timer` 和 Quartz。这两个工具各有特点,适用于不同的场景。下面我们将深入探讨它们的区别。 首先,`java.util.Timer` 是Java标准库中的一个简单...

    spring定时器 Spring定时器的两种实现方式Java的Timer类和OpenSymphony的Quartz。

    Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...

    SPRING 定时器的使用

    在Spring框架中,实现定时任务有两种主流方式:使用`java.util.Timer`类或集成第三方库如Quartz。这两种方法各有优势: - **Java Timer**:简单易用,适合简单的定时任务需求。 - **Quartz**:功能强大且灵活,支持...

    spring定时器的包和配置文件

    Spring定时器基于Java的`java.util.Timer`和`java.util.TimerTask`,但更进一步,它支持Quartz和SimpleScheduler这两种强大的定时任务库。Quartz是一个开源的作业调度框架,而SimpleScheduler则内置在Spring中,适用...

    spring定时器3.0之前和3.0之后以及相应的项目实例

    在Spring的早期版本中,定时任务主要依赖于`org.springframework.scheduling.timer`包,而在3.0版本之后,Spring引入了Quartz和Spring Task(也称为`org.springframework.scheduling.concurrent`)来提供更加强大的...

    quartz+spring定时器

    【标题】"quartz+spring定时器"涉及的是在Java应用中使用Spring框架与Quartz库来实现定时任务的管理。Quartz是一个开源的作业调度框架,它允许开发者定义、调度和执行作业,而Spring则提供了强大的依赖注入(DI)和...

    spring定时器两种实现方式

    Spring 定时器两种实现方式 Spring 定时器是 Spring 框架中的一种组件,用于实现定时任务的执行。...Spring 定时器提供了两种实现方式,Java Timer 定时和 Quartz 定时器,开发者可以根据实际情况选择合适的实现方式。

    spring 定时器 quartz

    在给定的配置中,我们看到使用了Spring的`Timer` API来实现定时任务,而不是Quartz。以下是对这部分内容的详细解释: 1. **ScheduledTimerTask**: 这个Bean `repeatingTrigger` 是一个`ScheduledTimerTask`实例,它...

    spring 定时器

    spring-2.0.6.jar Spring框架的核心包 jta.jar 会用到包中的usertransaction,具体什么用此处暂时不论 quartz-1.6.0.jar 会用到CronTrigger这个类,通过表达式实现精确的定时 commons-logging-1.1.1.jar 日志管理包 ...

    spring定时器相关资料

    Spring定时器,全称为Spring Framework中的Task Execution and Scheduling模块,是Spring提供的一个强大而灵活的任务调度框架。它允许开发者在应用中安排周期性任务的执行,无需直接依赖底层的调度实现,如 Quartz ...

    Spring定时器TimerTask用法

    **Spring定时器TimerTask用法** 在Java世界中,`java.util.Timer` 和 `java.util.TimerTask` 是用于实现定时任务的基本工具,但它们在多线程环境中的表现并不理想,容易引发内存泄漏。Spring框架提供了更强大的定时...

    spring3.0+quartz-1.6.0定时

    在定时任务方面,Spring 3.0 提供了`org.springframework.scheduling`包,支持基于定时器(Timer)和调度器(Scheduler)的任务调度。 **Quartz 1.6.0** Quartz 1.6.0 是一个成熟的任务调度库,允许开发者定义、...

    java Spring OpenSymphony的Quartz定时器的时间设置

    #### 一、Spring定时器的两种实现方式概述 在Java Spring框架中,开发者有多种选择来实现定时任务的功能,其中最为流行的两种方式分别是使用Java自带的`Timer`类以及OpenSymphony的Quartz定时器。本文将重点探讨...

    Spring 定时器.txt

    Spring 框架提供了多种机制来支持定时任务的实现,这其中包括基于 Java 的标准 `java.util.Timer` 和更为强大的 Quartz 调度框架的支持。本文档将详细介绍这两种定时器的配置过程及其在 Spring 中的应用。 #### 二...

    spring定时器--代码解读

    总结来说,Spring定时器提供了两种方式来创建和执行定时任务:基于Timer的简单定时任务和基于Quartz的高级定时任务。Timer适用于简单的定时需求,而Quartz更适合需要精确控制任务执行时间和周期的复杂场景。在实际...

    Spring定时器的两种实现方式.doc

    在Spring框架中,定时任务的实现通常有多种方式,这里主要讨论的是两种常见的方式:Java Timer和Quartz定时器。这两种方法都有其特点和适用场景,开发者可以根据项目需求来选择。 1. **Java Timer定时器** Java ...

    spring quartz定时器的简单配置和使用

    ### Spring Quartz 定时器的简单配置与使用 在现代软件开发中,特别是Java领域,定时任务是非常常见的需求之一。Spring框架提供了强大的功能支持来帮助开发者实现这些需求,其中Spring Quartz是一个非常流行的解决...

    JAVA中 Spring定时器的两种实现方式

    在Java的Spring框架中,定时任务的实现有多种方式,其中两种常见的实现是基于Java的`Timer`类和OpenSymphony的`Quartz`库。这两种定时器在Spring中的使用和配置有所不同,各有优缺点,适合不同的应用场景。 1. **...

Global site tag (gtag.js) - Google Analytics