利用ServletContextListener实现定时任务

一个实现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 >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值