有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。
1.Java Timer定时 java
首先继承java.util.TimerTask类实现run方法 spring
import java.util.TimerTask; public class EmailReportTask extends TimerTask{ @Override public void run() { } }
timerTask属性告诉ScheduledTimerTask运行哪一个。86400000表明24个小时 ide
启动Spring定时器 this
Spring的TimerFactoryBean负责启动定时任务 spa
- <bean class="org.springframework.scheduling.timer.TimerFactoryBean">
- <property name="scheduledTimerTasks">
- <list><ref bean="scheduleReportTask"/>list>
- property>
- bean>
- scheduledTimerTasks里显示一个须要启动的定时器任务的列表。
- 能够经过设置delay属性延迟启动
- <bean id="scheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
- <property name="timerTask" ref="reportTimerTask" />
- <property name="period">
- <value>86400000value>
- property>
- <property name="delay">
- <value>3600000value>
- property>
- bean>
这个任务咱们只能规定每隔24小时运行一次,没法精确到某时启动
code
2.Quartz定时器xml
首先编写服务类:继承
import java.util.Date; public class CourseService { public void start(){ System.out.println(new Date().getSeconds()); } }
编写调度类,须要继承QuartzJobBean :get
package QuartzTest;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class QuartzJob extends QuartzJobBean {
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
courseService.start();
}
private CourseService courseService;
public CourseService getCourseService() {
return courseService;
}
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
io
编写配置文件
须要说明的是,咱们有两种trigger,分别是simple和cron模式,simple方式和timertask相似,采用设置interval方式进行调度,而cron能够特有的语法很详细的定制调度执行时间,具体描述在配置文件的注释中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="courseService" class="QuartzTest.CourseService"/>
<!-- 建立调度任务 使用单独编写的调度类QuartzJob -->
<bean id="reportJbo" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>QuartzTest.QuartzJob</value>
</property>
<property name="jobDataAsMap">
<map>
Spring还为咱们提供了更简单的加载调度的方式,也就说咱们在已经有业务方法CourseService时不须要再额外编写调度类QuartzJob,能够直接配置service的方法
<bean id="reportJbo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="courseService"/> </property> <property name="targetMethod"> <value>start</value> </property> </bean>