无非就是两种方法
1:Servlet
2: Listener
 
Servlet:
package  dot.gif

import  org.apache.log4j.Logger;
import  javax.servlet.http.HttpServlet;
import  java.util.Calendar;
import  java.util.Date;
import  java.util.Timer;
import  java.util.TimerTask;

/**
 * 
@author  martin
 
*/
public   class  LuceneTimerServlet  extends  HttpServlet {
    
private   static  Logger logger  =  Logger.getLogger(LuceneTimerServlet. class );
    
private   static  Timer timer;

    
static  {
        timer 
=   new  Timer( true );
        timer.schedule(
new  TimerTask() {
            
public   void  run() {
                System.out.println(
" 开始创建索引@ "   +  getTime(Calendar.getInstance()));
                TaxDocIndexer indexer 
=   new  TaxDocIndexer();
                indexer.setFirstRun(Boolean.TRUE);
                indexer.fetch();
                System.out.println(
" 索引创建成功@ "   +  getTime(Calendar.getInstance()));
            }
        },
                getFirstTime(),
                getPeriod()
        );
    }


    
public   void  destroy() {
        logger.debug(
" LuceneTimerServlet.destroy() begin " );
        timer.cancel();
    }

    
/**
     * 从服务启动起算,第二天零时开始执行
     *
     * 
@return  Timer第一次执行时间
     
*/
    
private   static  Date getFirstTime() {
        Calendar calendar 
=  Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, 
1 );
        calendar.set(Calendar.HOUR_OF_DAY, 
0 );
        calendar.set(Calendar.MINUTE, 
0 );
        calendar.set(Calendar.SECOND, 
0 );
        logger.debug(
" 开始执行时间: "   +  getTime(calendar));
        
return  calendar.getTime();
    }

    
/**
     * 
@param  calendar
     * 
@return  formated time string
     
*/
    
private   static  String getTime(Calendar calendar) {
        
return   new  StringBuffer()
                .append(calendar.get(Calendar.YEAR)).append(
" " )
                .append(calendar.get(Calendar.MONTH) 
+   1 ).append( " " )
                .append(calendar.get(Calendar.DAY_OF_MONTH)).append(
" 日   " )
                .append(calendar.get(Calendar.HOUR_OF_DAY)).append(
" " )
                .append(calendar.get(Calendar.MINUTE)).append(
" " )
                .append(calendar.get(Calendar.SECOND)).append(
" " )
                .toString();
    }

    
/**
     * 计算一天的时间间隔
     * 一天24小时×每小时60分×每分60秒×1000
     *
     * 
@return  一天时间
     
*/
    
private   static   long  getPeriod() {
        
return   86400000 ;
    }
}

配置web.xml
     < servlet >
        
< servlet-name > luceneTimerServlet </ servlet-name >
        
< servlet-class > sompackage.servlet.LuceneTimerServlet </ servlet-class >
        
< load-on-startup > 1 </ load-on-startup >
    
</ servlet >


如果采用Listener,则是:
     < listener >     
        < listener-class > sompackage.servlet.LuceneTimerServlet </ listener-class >
    
</ listener >