读书人

在Spring中运用 Java Timer 调度任务

发布时间: 2012-10-06 17:34:01 作者: rapoo

在Spring中使用 Java Timer 调度任务
从Java 1.3开始,Java SDK就通过java.util.Timer类提供了基本的调度功能。这个类允许你调度一个任务(通过java.util.TimerTask子类定义)按任意周期运行。

创建一个定时器任务
使用Java Timer来调度发送注册报表邮件的第一步是从java.util.TimerTask中派生出邮件任务,如以下程序所示。

 程序:一个用于发送注册报表邮件的定时器任务
Java代码

public class EmailReportTask extends TimerTask {       public EmailReportTask() {}       public void run() {           courseService.sendCourseEnrollmentReport();       }       private CourseService courseService;       public void setCourseService(CourseService courseService) {           this.courseService = courseService;        }   }  

run()方法定义了当任务运行时该做什么。在上面的例子中,它调用CourseService的sendCourseEnrollmentReport()方法(见程序清单7.1)来发送注册报表邮件。CourseService是通过依赖注入方式提供给EmailReportTask的。
按以下方式在Spring配置文件中声明EmailReportTask:
Java代码
<bean id="reportTimerTask" name="code"><bean id="scheduledReportTask" name="code"><bean name="code"><bean class="org.springframework.scheduling.timer.TimerFactoryBean">        <property name="scheduledTimerTasks">           <list>               <ref bean="scheduledReportTask"/>           </list>       </property>         <!-- delay 属性指定其间隔时间 -->       <property name="delay">           <value>3600000</value>       </property>   </bean>  


即使使用deplay属性,EmailReportTask的第一次运行时间仍然是相对于应用程序的启动时间的。怎样才能做到如课程主任所要求的在每天早晨6:00发送邮件(而不是在早晨5:00启动应用程序)呢?

遗憾的是,这是Java Timer的一个局限性。你可以指定任务执行的频度,但你无法精确指定它何时运行。为了能够精确指定何时发送电子邮件,你需要使用Quartz调度器:http://xingxingyu.iteye.com/blog/618292

读书人网 >软件架构设计

热点推荐