`

spring 任务调度

阅读更多

Java的Timer类和OpenSymphony的Quartz调度器是两个流行的调度API。Spring为这两个调度器提供了一个抽象层,可以更容易的使用他们
(1)使用java Timer调度任务
    从jdk1.3开始提供java.util.Timer类实现基本的调度功能,这个类允许你调度一个任务(通过java.util.TimerTask子类定义)按任意周期运行
    1.创建一个定时任务
       使用java Timer调度第一步是从java.util.TimerTask派生一个任务,如:
   public class EmailReportTask exetends TimerTask
   {
    public EmailReportTask()
    {}
    public void run()
    {
     courseService.sendCourseEnrollmentReport();
    }
    private CourseService courseService;
    public void setCourseService(CourseService courseService)
    {
     this. courseService= courseService;
    }
   }
2.在Spring 配置文件中声明EmailReportTask
   <bean id=”reportTimerTask” class=”com.springinaction.training.schedule.EmailReportTask”>
    <property name=” courseService”>
     <ref bean=” courseService”/>
    </property>
   </bean>
声明本身只是将EmailReportTask放到应用上下文,并在courseService属性装配courseService Bean。在调度之前不会做任何事。
3.调度定时任务
    Spring的ScheduledTimerTimerTask定义了一个定时器任务的运行周期。应该如下装配一个ScheduledTimerTask
   <bean id=”scheduledReportTask” class=”org.springframework.scheduling.timer.ScheduledTimerTask”>
    <property name=”timerTask”>
     <ref bean =”reportTimerTask”/>
    </property>
    <property name=”period”>
     <value>86400000</value>
    </property>
   </bean>
      timerTask告诉ScheduledTimerTask运行哪个TimerTask,这里该装配属性指向reportTimerTask的一个引用。属性period告诉ScheduledTimerTask以怎样的频率调用TimerTask的run()方法。这个属性以毫秒作为单位,86400000指定该任务每24小时运行一次。
4.启动定时器
Spring 的TimerFactoryBean负责启动定时任务。按以下方式在Spring配置文件里声明它
   <bean class=”org.springframework.scheduling.timer. ”>
    <property name=”scheduledTimerTask”>
     <list>
      <ref bean =”scheduledReportTask”/>
     </list>
    </property>
   </bean>
属性scheduledTimerTasks    要求一个需要启动的定时器任务列表。ScheduledTimerTask有一个delay属性,允许你指定当任务第一次运行之前应该等多久。如,EmailReportTask的第一次运行延迟1小时。
   <bean id=”scheduledReportTask” class=”org.springframework.scheduling.timer.ScheduledTimerTask”>
    <property name=”timerTask”>
     <ref bean=”reportTimerTask”/>
    </property>
    <property name=”period”>
     <value>86400000</value>
    </property>
   <property name=”delay”>
     <value>3600000</value>
    </property>

Java Timer可以指定任务执行的频率,但是无法精确指定何时运行。

(2)使用Quartz调度器
Quartz比java Timer更好的地方在于它允许调度一个任务在某个特定的时间或者日期执行
1.创建一个任务
  任务类需要从Spring 的QuartzJobBean类继承,如:
   Public class EmailReportJob extends QuartzJobBean
    {
     Protected void executeInternal(JobExecutionContext context)throws JobExecutionException
     {
      courseService.sendCourseEnrollmentReport();
     }
     private CourseService courseService;
     public void setCourseService(CourseService courseService)
     {
      this. courseService= courseService;
     }
    }
QuartzJobBean是Quartz中与java的TimerTask等价的类。它实现了org.quartz.Job接口,executeInternal()方法定义了在预定的时刻来临时执行那些动作。
2.Spring配置文件中声明
   <bean id=”reportJob” class=”org.springframework.scheduling.quartz.JobDetailBean”>
    <property name=” jobClass”>
     <value>com.springinaction.training.schedule.EmailReportJob</value>
    </property>
    <property name=”jobDataAsMap”>
     <map>
      <entry key=” courseService”>
       <ref bean =” courseService”/>
      </entry>
     </map>
    </property>
   </bean>

3.调度任务
  Quartz的org.quartz.Trigger类描述了何时及怎样的频率来的运行一个Quartz工作。Spring 提供     了两个触发器,SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean和ScheduledTimerTask类似,用它来指定一个工作应以怎样的频率运行,及第一次运行工作前应等多久。Spring装配如下:
   <bean id=”simpleReportTrigger” class=”org.springframework.scheduling.quartz.SimpleTriggerBean”>
    <property name=”jobDetail”>
     <ref bean =”reportJob”>
    </property>
    <property name=”startDelay”>
     <value>3600000</value>
    </property>
    <property name=”repeatInterval”>
     <value>86400000</value>
    </property>
CronTriggerBean允许更精确的控制任务的运行时间。如果要在每天的6:00运行任务可以按照以下方式声明一个CronTriggerBean:
   <bean id=”cronReportTrigger” class=”org.springframework.scheduling.quartz.CronTriggerBean”>
    <property name=”jobDetail”>
     <ref bean =”reportJob”>
    </property>
    <property name=”cronExpression”>
     <value>0 0 6 * * ?</value>
    </property>
   </bean>
     和SimpleTriggerBean一样,jobDetail属性告诉触发器调度哪一个工作,属性cronExpression告诉触发器何时触发。一个cron表达式至少有6个由空格分隔的时间元素(最多7个)从左到右元素定义如下
   1。秒(0-59)
   2。分(0-59)
   3。小时(0-23)
   4。月份中的日期(1-31)
   5。月份(1-12 或 JAN-DEC)
   6。星期(1-7 或 SUN-SAT)
   7。年份(1970-2099)
     每一个元素都可以显示规定的一个值,一个区间(9-14),一个列表(9,12,14)或一个通配符(*)月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段
对于cronReportTrigger我们设置的cronExpression为 0 0 6 * * ?可以读作任意月份任何日期的6时0分0秒执行触发器
4.启动任务
  Spring的SchedulerFactoryBean时Quartz中与TimerFactoryBean的等价类。如下在Spring的配置文件中声明:
    <bean class=”org.springframework.scheduling.quartz.SchedulerFactoryBean”>
    <property name=”triggers”>
     <list>
      <ref bean =”cronReportTrigger”/>
     </list>
    </property>
Triggers属性接收一组触发器

调度单次方法调用
为了达到这个目的Spring提供了MethodInvokingTimerTaskFactoryBean和MethodInvokingJobDetailFactoryBean,分别可以使用java的Timer支持或者Quartz调度器对方法进行调度。
1.<bean id=”scheduledReportTask” class=”org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean”>
   <property name=”targetObject”>
    <ref bean=”courseService”/>
   </property>
   <property name=”targetMethod”>
    <value>sendCourseEnrollmentReport</value>
   </property>
   </bean>

2.<bean id=”scheduledReportTask” class=”org.springframework.scheduling.timer.MethodInvokingJobDetailFactoryBean”>
   <property name=”targetObject”>
    <ref bean=”courseService”/>
   </property>
   <property name=”targetMethod”>
    <value>sendCourseEnrollmentReport</value>
   </property>
   </bean>

分享到:
评论

相关推荐

    spring 任务调度实现代码例子

    下面将详细解释Spring任务调度的关键概念和实现方法。 1. **Spring Task模块** Spring Task是Spring框架内置的任务调度模块,它提供了简单的定时任务执行能力。通过使用Spring Task,我们可以轻松地在应用中添加...

    Spring任务调度demo

    本篇文章将深入探讨Spring任务调度的实现方法,以及如何利用Quartz库来增强任务管理能力。 首先,让我们理解Spring的任务调度。Spring通过`@Scheduled`注解提供了一种简单而强大的方式来执行定时任务。这个注解可以...

    spring任务调度实例

    总的来说,Spring任务调度实例提供了实践Quartz和Timer的机会,这对于学习和掌握Spring框架的高级特性和任务调度机制非常有价值。通过学习这个实例,开发者不仅可以提升自己的技能,还能了解到如何在实际项目中选择...

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

    《Spring任务调度配置详解:Spring+Quartz的整合应用》 在Java开发中,任务调度是不可或缺的一部分,Spring框架提供了与Quartz集成的能力,使得我们可以方便地管理和执行定时任务。本文将详细介绍如何通过Spring和...

    Spring实现任务调度

    Spring框架提供了强大的任务调度能力,使得开发者能够轻松地在Java环境中实现这一功能。本篇将深入探讨如何利用Spring进行任务调度,并结合代码演示和Quartz库的使用来丰富这一主题。 首先,Spring提供了两种主要的...

    spring任务调度(Quartz )

    Spring中的任务调度是实现应用程序自动化运行任务的重要工具,而Quartz是Java领域广泛使用的开源任务调度框架。在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作...

    Spring 任务调度

    【Spring 任务调度】是Spring框架中用于自动化执行任务的功能,它允许开发者安排任务在特定时间或间隔执行,无需用户交互。任务调度在许多场景下都非常有用,比如定期备份数据库、执行系统统计、检查新邮件等。 1. ...

    spring任务调度器

    java spring任务调度器

    Spring任务调度

    Spring任务调度ppt,讲的很细和值得看一下。

    Spring实现任务调度.rar

    Spring框架提供了强大的任务调度能力,使得开发者能够轻松地集成和管理定时任务。本资料“Spring实现任务调度”将深入探讨如何在Spring中设置和管理定时任务。 首先,我们需要理解Spring中的任务调度机制。Spring...

    Spring整合任务调度框架Quartz

    Spring 整合任务调度框架 Quartz 在软件开发中,任务调度框架是非常重要的一部分,它可以帮助开发者更好地管理和执行各种任务。在 Java 领域中,Quartz 是一个非常流行的任务调度框架,而 Spring 是一个非常流行的 ...

    maven spring 任务调度实列

    Spring框架提供了一个强大的任务调度模块——Spring Task,也被称为Spring Batch,它支持基于时间的任务调度和基于事件的任务触发。 首先,我们需要在`pom.xml`文件中添加Spring相关的依赖。这通常包括`spring-...

    spring分布式任务调度

    改分布式任务调度特性如下: 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2、动态:支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,即时生效; 3、调度中心HA(中心式):调度...

    Spring Quartz 任务调度实例

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。结合Spring框架,可以方便地在企业级应用中实现复杂的时间触发逻辑。本实例提供了可以直接运行的任务调度解决方案,既...

    Spring_任务调试源码

    通过分析和学习这些源码,你可以深入了解Spring任务调度的工作原理,掌握如何在实际项目中配置和使用。同时,结合Struts2和Hibernate,可以学习到如何构建一个完整的MVC架构的企业级应用,提高你的开发技能和对整个...

    20190821_Spring任务定时(任务调度).md

    Spring 定时器 任务调度 怎么在项目中写定时任务 怎么配置一些环境

    Spring定时调度简单实现源码

    在Spring框架中,定时任务调度是一项非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务。这个"Spring定时调度简单实现源码"很显然是一个关于如何在Spring中配置和使用定时任务的示例代码包。下面我们将...

Global site tag (gtag.js) - Google Analytics