Spring整合TimerTask实现定时任务调度
一.前言
最近在公司的项目中用到了定时任务,本篇博文将会对TimerTask定时任务进行总结,其实TimerTask在实际项目中用的不多,
因为它不能在指定时间运行,只能让程序按照某一个频度运行.
二.TimerTask
JDK中Timer是一个定时器类,它可以为指定的定时任务进行配置.
JDK中TimerTask是一个定时任务类,该类实现了Runnable接口,是一个抽象类,我们可以继承这个类,实现定时任务.
/**
*继承TimerTask实现定时任务
*/
publicclassMyTaskextendsTimerTask{
@Override
publicvoidrun(){
StringcurrentTime=newSimpleDateFormat("yyy-MM-ddhh:mm:ss").format(newDate());
System.out.println(currentTime+"定时任务正在执行...");
}
publicstaticvoidmain(String[]args){
Timertimer=newTimer();
//1秒钟执行一次的任务,参数为:task,delay,peroid
timer.schedule(newMyTask(),2000,1000);
}
}
三.整合Spring
两个核心类:ScheduledTimerTask,TimerFactoryBean
ScheduledTimerTask类是对TimerTask的包装器实现,通过该类可以为这个任务定义触发器信息.
TimerFactoryBean类可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTaskbean自动创建Timer实例.
1.引入Jar包:spring.jar,commons-logging.jar
2.定时调度业务类:
/**
*定时调度业务类
*/
publicclassTaskServiceextendsTimerTask{
privateintcount=1;
publicvoidrun(){
System.out.println("第"+count+"次执行定时任务");
count++;
}
}
3.核心配置:
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <beanid="taskService"class="com.zdp.service.TaskService"></bean> <beanid="scheduledTimerTask"class="org.springframework.scheduling.timer.ScheduledTimerTask"> <propertyname="timerTask"ref="taskService"/> <!--每隔一天执行一次配置:24*60*60*1000--> <!--每1秒钟程序执行一次--> <propertyname="period"value="1000"/> <!--程序启动4秒钟后开始执行--> <propertyname="delay"value="4000"/> </bean> <beanid="timerFactoryBean"class="org.springframework.scheduling.timer.TimerFactoryBean"> <propertyname="scheduledTimerTasks"> <list> <refbean="scheduledTimerTask"/> </list> </property> </bean> </beans>
4.测试类:
publicclassMain{
publicstaticvoidmain(String[]args){
//加载spring配置文件
ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("<<--------启动定时任务-------->>");
BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));
while(true){
try{
if(reader.readLine().equals("quit")){
System.out.println("<<--------退出定时任务-------->>");
System.exit(0);
}
}catch(IOExceptione){
thrownewRuntimeException("errorhappens...",e);
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。