利用Spring按调度计划调用方法
为了调度报表邮件,你不得不编写EmailReportJob Bean(或者在使用定时器任务的情况下,是EmailReportTask Bean)。但这个Bean只是简单地调用了一次CourseService的sendCourseEnrollmentReport()方法。以这一点而论,EmailReportTask和EmailReportJob看上去都有些空洞。如果你不用写这个额外的类就能指定调用sendCourseEnrollmentReport()方法,是不是很棒?
好消息!你能够不用编写一个单独的TimerTask或QuartzJobBean类就可以调度单次方法调用。要达到这一目的,Spring提供了MethodInvokingTimerTaskFactoryBean和MethodInvokingJobDetailFactoryBean,可以分别使用Java的定时器支持或Quartz调度器对方法调用进行调度。
例如,要使用Java的定时器服务调度一个对sendCourseEnrollmentReport()方法的调用,可以按照以下方式重新声明scheduledReportTask Bean:
<bean id="scheduledReportTask" name="code"><bean id="courseServiceInvokingJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="courseService"/> </property> <property name="targetMethod"> <value>sendCourseEnrollmentReport</value> </property></bean>