有兩種流行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>