`

[转]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中文帮助文档

    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中自动搜索组件...

    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. ...

    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