当前位置:早雪网网络学院编程文档Java → 一个简单的timer service

一个简单的timer service

减小字体 增大字体 作者:不详  来源:supcode.com收集整理  发布时间:2005-7-22 18:51:52
Web-TimeService
用于定时调用(触发)应用,EJB2.1也提供了TimerService,但现在有的application server不支持,有的就根本没有用到ejb,所以我写了一个简单的TimerSerivce

Public class TimerService
{
  public static final long p = 1000*60*60;
  Timer timer = new Timer(false);
  TimerSchedule schedule = null;

  public TimerService()
  {
  }

  public void start() throws Exception
  {
    schedule = new TimerSchedule();
    schedule.addTimerJob(new SomeTimerJob());
    //add other job here       
    timer.schedule(schedule,0,p);
  }

  public void stop() throws Exception
  {
    timer.cancel();
  }
 }
 
 //包含了多个TimerJob,并每到一定时候取出来看看是否该调用
 public class  TimerSchedule extends TimerTask
{
  private List list  = new ArrayList();
  public TimerSchedule()
  {
    
  }
  public void addTimerJob(TimerJob job)
  {
    list.add(job);
  }

  public void run()
  {
    Date now  = Calendar.getInstance().getTime();
    Date next = null;
    for(int i=0;i<list.size();i++)
    {
      TimerJob job = (TimerJob)list.get(i);
      next = job.getNextExeDate();
      if(isEquals(now,next))
      {
        job.execute();
      }
    }
  }

  /**
   * 比较俩个时间相差是否小于TimerService.p(一个周期)
   * @param now
   * @param next
   * @return
   */
  private boolean isEquals(Date now,Date next)
  {
    long time = next.getTime()-now.getTime();
    if (time <= TimerService.p && time >= 0)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  public boolean cancel()
  {
    return true;
  }
 }

//该接口描述了如何完成TimerTask,请参考TimerJobExample
interface TimerJob
{
  public  void execute();
  public  Date  getNextExeDate();
}


/**
 * 该例子用于演示如何完成tiemrjob
 * 该例子功能是在每天的凌晨一点调用
 */
public class TimerJobExample implements  TimerJob
{
  Calendar nextDate = null;
  public TimerJobExample()
  {
    nextDate = Calendar.getInstance();
    nextDate.add(Calendar.DAY_OF_MONTH,1);
    //将设置调用时间是(第二天的)每天凌晨1点
    nextDate.set(Calendar.HOUR_OF_DAY,1);
  }

  public void execute()
  {
    nextDate.add(Calendar.DAY_OF_MONTH,1);    
    nextDate.set(Calendar.HOUR_OF_DAY,1);
    callFunction();
  }

  public Date getNextExeDate()
  {
    return nextDate.getTime();
  }

 
  private void callFunction()
  {
     System.out.println("TimerJobExample call ejb funcation:"+new Date());
    
   }
 }


启动Web_TimerService
启动Web-TimerService可以有多种方法,下面列出一个简单的方法,通过jsp来启动,停止TimerService

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="com.ted.cfioms.common.alert.*"%>
<%
    TimerService service = (TimerService)application.getAttribute("timerService");
    boolean isStart = true;
    if(service == null)
{
    service = new TimerService();
    application.setAttribute("timerService",service);

    service.start();
}
else
{
    service.stop();
    isStart = false;
    service = null;
}
%>
<html>
<head>
<title>
timerService
</title>
</head>
<body bgcolor="#ffffff">
<h1>
<%=(isStart?"start ok":"stop ok")%>
</h1>
</body>
</html>

Tags:简单,timer,service
[数据载入中...] [返回上一页] [打 印]