2024年3月24日发(作者:)
使用Quartz调度器
Quartz调度器为调度工作提供了更丰富的支持。和Java定时器一样,可以使用
Quartz来每隔多少毫秒执行一个工作。但Quartz比Java Timer更先进之处在
于它允许你调度一个工作在某个特定的时间或日期执行。
创建一个类来定义工作
定义Quartz工作的第一步是创建一个类来定义工作。要做到这一点,你需
要从Spring的QuartzJobBean中派生子类,如程序清单7.3所示:
程序清单7.3 定义一个Quartz工作public class EmailReportJob extends
QuartzJobBean {
public EmailReportJob() {}
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
urseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
Service = courseService;
}
}
值得注意的是,在这里你并没有直接声明一个EmailReportJob Bean,而是声明
了一个JobDetailBean。这是使用Quartz时的一个特点。
JobDetailBean是Quartz的ail的子类,它要求通过
jobClass属性来设置一个Job对象。
使用Quartz的JobDetail中的另一个特别之处是EmailReportJob的
courseService属性是间接设置的。
JobDetail的jobDataAsMap属性接受一个,其中包含了需要设置
给jobClass的各种属性。
在这里,这个map包含了一个指向courseService Bean的引用,它的键值为
courseService。
当JobDetailBean实例化时,它会将courseService Bean注入到EmailReportJob
的courseService属性中。
调度工作
现在工作已经被定义好了,接下来你需要调度这个工作。
Quartz的r类描述了何时及以怎样的频度运行一个Quartz
工作。
Spring提供了两个触发器,SimpleTriggerBean和CronTriggerBean。你应该使
用哪个触发器?让我们分别考察一下这两个触发器,首先从SimpleTriggerBean
开始。
SimpleTriggerBean与ScheduledTimerTask类似。你可以用它来指定一个工
作应该以怎样的频度运行,以及(可选地)在第一次运行工作之前应该等待多久。
例如,要调度报表工作每24小时运行一次,第一次在1小时之后开始运行,可
以按照以下方式进行声明:


发布评论