Spring整合TimerTask实现定时任务调度

转自:http://blog.csdn.net/zdp072/article/details/32993767。

一. 前言

最近在公司的项目中用到了定时任务, 本篇博文将会对TimerTask定时任务进行总结, 其实TimerTask在实际项目中用的不多, 

因为它不能在指定时间运行, 只能让程序按照某一个频度运行.


二. TimerTask

JDK中Timer是一个定时器类, 它可以为指定的定时任务进行配置.

JDK中TimerTask是一个定时任务类, 该类实现了Runnable接口, 是一个抽象类, 我们可以继承这个类, 实现定时任务.

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 继承TimerTask实现定时任务 
  3.  */  
  4. public class MyTask extends TimerTask {  
  5.   
  6.     @Override  
  7.     public void run() {  
  8.         String currentTime = new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(new Date());  
  9.         System.out.println(currentTime + " 定时任务正在执行...");  
  10.     }  
  11.   
  12.     public static void main(String[] args) {  
  13.         Timer timer = new Timer();  
  14.           
  15.         // 1秒钟执行一次的任务, 参数为: task, delay, peroid  
  16.         timer.schedule(new MyTask(), 20001000);  
  17.     }  
  18. }  

三. 整合spring

两个核心类: ScheduledTimerTask, TimerFactoryBean

ScheduledTimerTask类是对TimerTask的包装器实现, 通过该类可以为这个任务定义触发器信息.

TimerFactoryBean类可以让Spring使用配置创建触发器, 并为一组指定的ScheduledTimerTask bean自动创建Timer实例.


1. 引入Jar包: spring.jar, commons-logging.jar

2. 定时调度业务类:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 定时调度业务类 
  3.  */  
  4. public class TaskService extends TimerTask {  
  5.     private int count = 1;  
  6.   
  7.     public void run() {  
  8.         System.out.println("第" + count + "次执行定时任务");  
  9.         count++;  
  10.     }  
  11. }  
3. 核心配置:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  5.     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  6.       
  7.     <bean id="taskService" class="com.zdp.service.TaskService"></bean>  
  8.     <bean id="scheduledTimerTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
  9.         <property name="timerTask" ref="taskService" />  
  10.           
  11.         <!-- 每隔一天执行一次配置: 24*60*60*1000 -->  
  12.         <!-- 每1秒钟程序执行一次  -->  
  13.         <property name="period" value="1000" />  
  14.           
  15.         <!-- 程序启动4秒钟后开始执行  -->  
  16.         <property name="delay" value="4000" />  
  17.     </bean>  
  18.       
  19.     <bean id="timerFactoryBean" class="org.springframework.scheduling.timer.TimerFactoryBean">  
  20.         <property name="scheduledTimerTasks">  
  21.             <list>  
  22.                 <ref bean="scheduledTimerTask" />  
  23.             </list>  
  24.         </property>  
  25.     </bean>  
  26. </beans>  
4. 测试类:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class Main {  
  2.     public static void main(String[] args) {  
  3.         // 加载spring配置文件  
  4.         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  
  5.         System.out.println("<<-------- 启动定时任务 -------- >>");  
  6.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
  7.         while (true) {  
  8.             try {  
  9.                 if (reader.readLine().equals("quit")) {  
  10.                     System.out.println("<<-------- 退出定时任务 -------- >>");  
  11.                     System.exit(0);  
  12.                 }  
  13.             } catch (IOException e) {  
  14.                 throw new RuntimeException("error happens...", e);  
  15.             }  
  16.         }  
  17.     }  
  18. }  

posted on 2016-12-29 14:49  chaiyu2002  阅读(199)  评论(0编辑  收藏  举报

导航