posts - 60,comments - 71,trackbacks - 0

一个WEB应用程序下的定时任务,觉得写的比较全,所以转了一下.
    一个实现ServletContextListener接口的类: StatisticsContextListener.java
package com.ed.cnc.servletListener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.ed.cnc.city.StatisticsTask;

/**
 * 统计ContextListener
 * 
@author westd
 *
 
*/

/**
 * 
@author westd
 *
 
*/

public class StatisticsContextListener implements ServletContextListener
{

    
private java.util.Timer timer = null;
    
    
    
/**
     * 这个方法在Web应用服务做好接受请求的时候被调用。
     * 
     * 
@see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
     
*/

    
public void contextInitialized(ServletContextEvent event) 
    
{
        timer 
= new java.util.Timer(true);
        event.getServletContext().log(
"定时器已启动"); 
        timer.schedule(
new StatisticsTask(event.getServletContext()), 060*60*1000);//每隔1小时
        event.getServletContext().log("已经添加任务调度表");
    }

    
    
    
/**
     * 这个方法在Web应用服务被移除,没有能力再接受请求的时候被调用。
     * 
     * 
@see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
     
*/

    
public void contextDestroyed(ServletContextEvent event)
    
{
        timer.cancel();
        event.getServletContext().log(
"定时器销毁");
    }


}


一个继承于TimerTask的一个类:StatisticsTask.java
package com.ed.cnc.city;

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

import javax.servlet.ServletContext;


/**
 * 统计任务
 * 
@author westd
 *
 
*/

public class StatisticsTask extends TimerTask
{

    
private static final int STATISTICS_SCHEDULE_HOUR = 0;
    
private static boolean isRunning = false;
    
private ServletContext context = null;

    
public StatisticsTask(ServletContext context)
    
{
        
this.context = context;
    }

    
    @Override
    
public void run()
    
{
        Calendar cal 
= Calendar.getInstance(); 
        
//System.out.println(isRunning);
        if (!isRunning) 
        

            
if (STATISTICS_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) //查看是否为凌晨
            
                isRunning 
= true
                context.log(
"开始执行指定任务");
                
                
//TODO 添加自定义的详细任务
                executeTask();
                
                
//指定任务执行结束
                isRunning = false;
                context.log(
"指定任务执行结束"); 
            }
 
        }
 
        
else 
        
{
            context.log(
"上一次任务执行还未结束");
        }

    
    }


    
/**
     * 执行任务
     
*/

    
public void executeTask()
    
{
        System.out.println(
"任务1");
        System.out.println(
"任务2");
    }

}


web.xml中添加如下代码:
<listener>
        
<listener-class>com.ed.cnc.servletListener.StatisticsContextListener</listener-class>
</listener>
posted on 2008-07-25 15:48 henry1451 阅读(417) 评论(1)  编辑  收藏

FeedBack:
# re: 利用ServletContextListener实现定时任务(l转)
2009-01-07 15:06 | 汽车工业滤纸
uijhy  回复  更多评论
  

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


网站导航: