使用Quartz或Timer完成时序调度工作

 使用QuartzTimer完成时序调度工作

简介

Spring提供了支持时序调度(译者注:Scheduling,下同)的整合类.现在, Spring支持内置于1.3版本以来的JDK中的TimerQuartz Scheduler(http://www.quartzscheduler.org)。 两个时序调度器通过FactoryBean建立,保持着可选的对Timers或者Triggers的引用。更进一步的, 对于Quartz SchedulerTimer两者存在一个方便的类允许你调用目标对象(类似于通常的MethodInvokingFactoryBeans)上的某个方法

第一种方式: 使用OpenSymphony Quartz Scheduler

Quartz使用Triggers,JobsJobDetail来实现时序调度中的各种工作,实现每隔多少毫秒执行一个工作。但QuartzJava Timer更先进之处在于它允许你调度一个工作在某个特定的时间或日期执行。为了了解Quartz背后的种种基本观点,你可以移步至http://www.opensymphony.com/quartz。 为了方便的使用,Spring提供了几个类在基于Spring的应用中来简化对Quartz的使用。

111创建一个工作

定义Quartz工作的第一步是创建一个类来定义工作。要做到这一点,你需要从Spring的QuartzJobBean中派生子类,如程序清单7.3所示:

 程序清单7.3  定义一个Quartz工作

  public class EmailReportJob extends QuartzJobBean {

  public EmailReportJob() {}

  protected void executeInternal(JobExecutionContext context)

       throws JobExecutionException {

     courseService.sendCourseEnrollmentReport();

    }

  private CourseService courseService;

  public void setCourseService(CourseService courseService) {

      this.courseService = courseService;

    }

  }

QuartzJobBeanQuartz中与 JavaTimerTask等价的类。它实现了org.quartz.Job接口。executeInternal()方法定义了当预定的时刻来临时应 该执行哪些动作。在这里,正如EmailReportTask,你只是简单地调用了courseService属性的 sendCourseEnrollmentReport()方法。

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>

值得注意的是,在这里你并没有直接声明一个 EmailReportJob Bean,而是声明了一个JobDetailBean。这是使用Quartz时的一个特点。JobDetailBeanQuartz org.quartz.JobDetail的子类,它要求通过jobClass属性来设置一个Job对象。

使用QuartzJobDetail中的另一个特 别之处是EmailReportJobcourseService属性是间接设置的。JobDetailjobDataAsMap属性接受一个

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值