注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
一个3S皮肤的教程
PHOTOSHOP鼠绘手机教程——方法简
恶意网页病毒十三大症状分析及简
一个中毒之后的惨胜的过程
一个显为人知的木马随程序启动的
一个包子引发的杀毒软件血战:到底
关于木马隐藏一个的新方法
简单三步走堵死SQLServer注入漏洞
查看系统中是否有简单木马
“线程安全”是一个什么概念?
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> Java >> 文章正文
一个简单的timer service
作者:佚名  来源:不详  点击:  更新:2006-12-19
简介:
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>






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务