Spring使用Quartz调度器 实现时间点任务(Spring in Action中文版)
7.3.2 使用Quartz调度器
Quartz调度器为调度工作提供了更丰富的支持。和Java定时器一样,可以使用Quartz来每隔多少毫秒执行一个工作。但Quartz比Java Timer更先进之处在于它允许你调度一个工作在某个特定的时间或日期执行。
关于Quartz的更多信息,可以访问Quartz位于http://www.opensymphony.com/quartz的主页。
让我们从定义发送报表邮件的工作开始使用Quartz:
创建一个工作
定义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;
}
}
QuartzJobBean是Quartz中与Java的TimerTask等价的类。它实现了org.quartz.Job接口。executeInternal()方法定义了当预定的时刻来临时应该执行哪些动作。在这里,正如EmailReportTask,你只是简单地调用了courseService属性的sendCourseEnrollmentReport()方法。
在Spring配置文件中按以下方式声明这个工作:
<bean id="reportJob"
class="com.lxh.job.otherManager">
</bean>
</beans> 1 楼 huajz 2008-07-21
我可以问一下吗?如果我的一个任务运行所需要的时间是30秒。但是我设了让他每10秒运行一次。这样的话就是每10秒运行一次任务。这样任务就重叠了。请问lz, 除了将每次运行的时间调大,还有什么办法可以让这些任务不重叠。是不是有什么参数可以设置的?
2 楼 chorpin 2008-09-25 两次任务之间是不同的线程吧,重复有关系吗?
至于你说的如果不把时间间隔调大,我也没有好的办法,期待高人出现