posts - 297,  comments - 1618,  trackbacks - 0
以前用JDK的Timer实现过定时同步用户数据,今日看到Timer相关的一个例子,实现每隔10分钟检测一次用户是否有新邮件抵达,调度只在每天早上9:00到下午6:00进行。

    一. 建立任务:

import java.util.TimerTask; 
import java.util.Calendar; 

public class MyTask extends TimerTask

    
private static final int C_SCHEDULE_HOUR = 15
    
private static boolean isRunning = false

    
public MyTask()
    

    }
 

    
public void run()
    

        Calendar cal 
= Calendar.getInstance(); 
        
if (!isRunning)
        

            
//if (C_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY))
            
                isRunning 
= true
                System.out.println(
new java.util.Date() + "        任务开始"); 
                
for (int i = 0 ; i < 100 ; i++ )
                
{
                    System.out.println(
new java.util.Date() + "          任务完成" + i + "/" + 100 ); 
                }
 
                isRunning 
= false
                System.out.println(
new java.util.Date() + "       所有任务完成!"); 
            }
 
        }
 
        
else 
        

            System.out.println(
new java.util.Date() + "         任务退出!!!"); 
        }
 
    }
 
}

注意:Timer类并不支持每天每段时间的调度,因此代码中使用Calendar类获取当前时间,比较当前时间与系统需要调度的时间段。

    二.  调度任务

    本应用的计时器随应用的启动而启动,一次可以设计成load-on-startup的servlet,也可以设计成listener,一般设计成listener,本例中采用该方法。

   任务调督的listener如下:

import java.util.TimerTask; 
import java.util.Timer; 
import javax.servlet.*

public class ScheduleListener implements ServletContextListener

    
private java.util.Timer timer = null
    
    
public void contextInitialized(ServletContextEvent sce)
    

        timer 
= new Timer(true); 
        sce.getServletContext().log(
new java.util.Date() + "计时器已经启动"); 
        System.out.println(
new java.util.Date() + "      计时器已经启动");
        timer.schedule(
new MyTask() , 0 , 2*60*1000);//每4分钟执行一次 
        sce.getServletContext().log(new java.util.Date() + "计时器执行一次!!!!!"); 
        System.out.println(
new java.util.Date() + "          计时器执行一次!!!!!");
    }
 
    
    
public void contextDestroyed(ServletContextEvent sce)
    

        timer.cancel(); 
        sce.getServletContext().log(
new java.util.Date() + "计时器被销毁!!!"); 
        System.out.println(
new java.util.Date() + "          计时器被销毁!!!");
    }
 
}
 

三.在web.xml加载该listener,配置文件如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd"
>

<web-app>
    
<!-- 此处配置listener-->
    
<listener> 
        
<listener-class>ScheduleListener</listener-class> 
    
</listener> 
</web-app>
    应用启动后,该listener随着启动,负责加载Timer实例。
posted on 2007-02-11 23:35 阿蜜果 阅读(1434) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2284416
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜