`

[转]Spring2.5定时任务的多种使用方法总结

阅读更多
这里使用的是Spring2.5,需要的jar包:spring.jar(spring2.5的完全包);quartz-all-1.6.0.jar;还需commons-*.jar。

方法一:
任务调度工作类代码:

public class Clock extends TimerTask{         
    @Override     
    public void run() {            
       System.out.println("clock!");       
    }        
}  
 

应用上下文XML中的具体配置如下:
<?xml version="1.0" encoding="UTF-8"?>   
<beans xmlns="http://www.springframework.org/schema/beans"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://www.springframework.org/schema/beans           
                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
    <!-- 第一步 声明一个定时任务,该类extends java.util.TimerTask -->   
    <bean id="clock" class="com.Clock" />  
    <!-- 第二步 调度定时任务,把声明的定时任务注入进来,并设置定时参数 -->   
    <bean id="scheduledClock" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
        <property name="timerTask" ref="clock" />  
        <!--这里是每隔多长时间就进行一次计时任务,单位ms-->   
        <property name="period">   
            <value>5000</value>       
        </property>  
        <!--这里是服务启动后延时多少时间,开始计时任务,单位ms-->   
        <property name="delay">   
            <value>5000</value>   
        </property>   
    </bean>  
  
    <!-- 第三步 启动定时任务,如果有多个定时任务,则重复步骤一,二,然后把第二步设置的beany放在下面的list列表中.此方法不能精确几点运行定时任务 -->   
    <bean class="org.springframework.scheduling.timer.TimerFactoryBean">   
        <property name="scheduledTimerTasks">   
            <list>   
                <ref bean="scheduledClock" />  
            </list>   
        </property>   
    </bean>  
</beans>   


方法二:
任务调度工作类代码:
public class QuartzClock extends QuartzJobBean {      
    @Override     
    protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {      
       System.out.println("QuartzClock!");      
    }       
}
   

应用上下文XML中的具体配置如下:
<?xml version="1.0" encoding="UTF-8"?>   
<beans xmlns="http://www.springframework.org/schema/beans"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://www.springframework.org/schema/beans           
                http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
    <!-- 第一步 声明一个定时任务,注意不是直接声明,而是声明一个JobDetailBean,通过jobClass属性设置一个定时对象 -->   
    <bean id="quartzClock" class="org.springframework.scheduling.quartz.JobDetailBean">  
        <property name="jobClass">   
            <value>com.QuartzClock</value>   
        </property>   
    </bean>  
      
    <!-- 第二步 调度定时任务,把声明的定时任务注入进来,并设置定时参数,配置方式同第一种方法 -->   
    <!--   
    <bean id="quartzClockTask" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
        <property name="jobDetail">   
            <ref bean="quartzClock" />   
        </property>    
        <property name="startDelay">   
            <value>6000</value>   
        </property>   
        <property name="repeatInterval">   
            <value>6000</value>   
        </property>   
    </bean>   
    -->  
  
    <!-- 这种配置可以精确几点执行定时任务 -->   
    <bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="quartzClock" />  
        <property name="cronExpression">   
            <!--   0/15 * * * * ? 每15秒钟  -->  
            <value>0/15 * * * * ?</value>  
        </property>   
    </bean>   
      
    <!--第三步 启动定时任务,注意这里的ref bean -->   
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   
        <property name="triggers">   
            <list>   
                <ref bean="cronQuartzClock" />  
            </list>   
        </property>   
    </bean>   
</beans>    
 

方法三:
任务调度工作类代码:

public class TaskServiceImpl{  
    public void synchronizeDb(){  
        System.out.println("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>     
    <!-- 定时任务的工作Bean -->  
    <bean id="quartzJob" class="com.whty.task.service.impl.TaskServiceImpl" />  
      
    <!-- 定义生成工作对象的工厂,并为工厂设定目标对象targetObject属性、目标对象的工作方法targetMethod属性 -->  
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
        <property name="targetObject" ref="quartzJob" />  
        <property name="targetMethod">  
            <value>synchronizeDb</value>  
        </property>  
        <property name="concurrent" value="false" />  
    </bean>  
      
    <!-- 任务调度计时器,进行定时设置。CronTriggerBean能进行非常精确的定时设置 -->  
    <bean id="cronQuartzClock" class="org.springframework.scheduling.quartz.CronTriggerBean">  
        <property name="jobDetail" ref="jobDetail" />  
        <!-- cron表达式 -->  
        <property name="cronExpression">  
            <!--   0 0 */2 * * ? 每两小时、整点触发 -->  
            <!--   0 0/2 * * * ? 每两分钟  -->  
            <!--   0/5 * * * * ? 每五秒钟  -->  
            <!--   0 15 10 * * ? 每天Y分X点触发  -->  
            <value>0/15 * * * * ?</value>  
        </property>  
    </bean>  
      
    <!-- 调度任务触发器,启动定时任务-->  
    <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="cronQuartzClock" />  
            </list>  
        </property>  
    </bean>  
</beans>  


特别说明:
Xml代码  收藏代码
0 0/2 * * * ? 每两分钟 
就上面的这个cron表达式,定时任务在第三种配置模式下,表现为以下行为:
定时任务是一个线程在执行,例如线程在09:00:00启动,且完成工作在09:02:00 之前,那么线程健在09:02:00再次启动。如果线程在09:00:00启动,且完成工作在09:02:00之后,那么线程健在完成时间再次启动。

在该配置下,总结规律如下:
1.定时任务将由一个线程启动,而不是多个线程执行。
2.该线程每两分钟启动一次,该时间间隔是线程每次启动的时间差,如果线程执行时间超出了两分钟的设定间隔,那么线程在执行完成后继续执行。

多线线程配置模式下的运行规律大家可以自行测试。
分享到:
评论

相关推荐

    spring2.5 定时器任务

    根据给定的部分内容,我们可以看到一个典型的Spring2.5定时任务配置示例。下面对这些配置进行详细解读: ##### 1. 线程池配置(`ThreadPoolTaskExecutor`) ```xml &lt;bean id="executor" class="org.spring...

    传智播客Spring2.5视频教程 PPT

    4. **服务支持**:Spring 提供了诸如消息服务、定时任务等多种企业级服务。 5. **模板类**:如JdbcTemplate、HibernateTemplate,简化了数据访问操作。 6. **框架集成**:Spring 可以无缝集成其他框架,如MVC框架...

    spring2.5 -3.0 hibernate3.3 jar包说明

    提供了一些额外的功能支持,如缓存管理、定时任务、邮件服务等。 11. **spring-web.jar** 提供了Web应用程序支持,包括对Web环境下的上下文的支持,如Servlet容器初始化参数、会话管理和过滤器等。 12. **...

    基于struts2 spring2.5 hibernate3的人事管理系统 源码完整包

    在人事管理系统中,Quartz可能被用来安排定期的薪资计算、员工考勤统计等定时任务。 J2EE(Java Platform, Enterprise Edition)是Java开发企业级应用的平台,提供了多种服务和API,如EJB(Enterprise JavaBeans)...

    Json、Linux、Spring定时任务

    为了使用Spring的定时任务功能,需要在项目中添加以下依赖库: - **commons-collections.jar** - **quartz-all-1.6.1.jar** - **jta.jar** - **commons-lang-2.4.jar** - **spring-2.5.6.jar** - **commons-logging...

    Spring整合TimerTask实现定时任务调度

    Spring框架提供了多种方式来实现定时任务,其中之一就是整合JDK自带的`TimerTask`。本文将详细介绍如何在Spring中使用`TimerTask`实现定时任务调度。 首先,`TimerTask`是Java标准库中的一个类,它实现了`Runnable`...

    Spring MVC框架实例

    - 集成其他中间件,如 Redis 缓存、Quartz 定时任务等。 总结,Spring MVC 为开发者提供了灵活且强大的 Web 开发框架,通过 XML 配置,我们可以自定义各个组件,实现复杂的应用场景。随着版本的升级,Spring 逐渐...

    PIMS-spring4.2+struts2.5+jdbc.zip

    5. **Spring Batch**:处理批量和定时任务。 6. **Spring Integration**:提供多种集成技术,如消息传递和文件系统交互。 **Struts 2.5** Struts 2是基于MVC设计模式的Java Web应用程序框架。Struts 2.5是该框架的...

    spring-api中文文档.zip

    在提供的文档中,"Spring3.0中文版.chm"、"Spring2.5中文版.chm"和"Spring3.2中文版.pdf"分别对应Spring的不同版本。你可以根据实际需要选择对应的文档进行学习。例如,如果你正在使用Spring 3.0,那么"Spring3.0...

    pring定时器的使用

    总结一下,Spring定时任务的使用涉及到以下几个核心概念: 1. **SchedulerFactoryBean**:这是Spring用来创建Quartz调度器的bean,你可以配置它的属性如`autoStartup`和`triggers`。 2. **CronTriggerBean**:用于...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    Spring 2.0 开发参考手册

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ Load-time weaving(LTW) 6.9. ...

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    图书管理系统源码(ExtJs+struts2+hibernate+spring)

    5. **定时任务**:描述中提到系统尝试了两种定时任务,这可能是指使用Spring的TaskExecutor或者Quartz等第三方库来定期执行某些任务,比如自动备份数据库、统计图书借阅情况等。定时任务在图书管理系统中可以实现...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    spring3.1中文参考文档

    - 基础组件包含了事件传播机制、定时任务执行等。 - **1.2.5 测试** - Spring提供了测试框架,简化了单元测试和集成测试的过程。 **1.3 使用方案** - **1.3.1 依赖管理和命名规约** - 讲述了如何在项目中管理...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack ...19.2. 使用Spring JMS ...

    spring技术文档

    ### Spring技术文档知识点详解 #### 一、Spring框架概述与应用场景 **1.1 框架概述** Spring框架是一个开源的应用...以上是Spring框架文档中提到的关键知识点总结,希望能帮助开发者更好地理解和使用Spring框架。

    Spring Boot面试题(2022最新版)-重点

    Spring Boot 支持通过 `@Scheduled` 注解来定义定时任务。可以通过配置定时任务的执行周期(如每天执行一次、每分钟执行一次等)来实现自动化任务处理。 以上是对 Spring Boot 相关知识点的详细解释,涵盖了 Spring...

Global site tag (gtag.js) - Google Analytics