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); } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。