Spring的任务调度有两种方式,一种是利用Java Timer,另外一种是使用quartz,quartz不但可以指定运行的频率,还可以指定在什么时间执行,一般建议使用quartz。Java Timer 简化了原来JDK 的任务调度,Spring为支持Timer提供以下两个工具类:
1)ScheduledTimerTask,用于封装一个调度类
2)TimerFactoryBean:用于启动线程,完成实际的调度
任务调度的实现步骤如下:
1、首先编写一个任务类,该类继承TimerTask,例如:
public class CheckWinner extends TimerTask {
private AuctionManager auctionManager;
public AuctionManager getAuctionManager() {
return auctionManager;
}public void setAuctionManager(AuctionManager auctionManager) {
this.auctionManager = auctionManager;
}@Override
public void run() {
try{
auctionManager.updateWinner();
}catch(Exception ex){
ex.printStackTrace();
}}
}
在该类中,调用逻辑服务接口,实现特定的任务。
2、在application.xml中,将该类配置成一个bean。
<bean id="checkWinner" class="com.haiyisoft.cc.study.auction.schedule.CheckWinner">
<property name="auctionManager" ref="auctionManager"/>
</bean>
此时,任务类不知道何时调度,调度的频率,也没有启动调度线程。
3、在application.xml中,配置调度任务的时间和频率,此时用到Spring框架的ScheduledTimerTask工具类。
<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="delay" value="0"/>
<property name="period" value="60000"/>
<property name="timerTask" ref="checkWinner"/>
</bean>
4、在application.xml中,配置启动调度线程,此时用到Spring框架的TimerFactoryBean
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTask"/>
</list>
</property>
</bean>