無(wú)非就是兩種方法
1:Servlet
2: Listener
Servlet:
package 
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("開(kāi)始創(chuàng)建索引@" + getTime(Calendar.getInstance()));
TaxDocIndexer indexer = new TaxDocIndexer();
indexer.setFirstRun(Boolean.TRUE);
indexer.fetch();
System.out.println("索引創(chuàng)建成功@" + getTime(Calendar.getInstance()));
}
},
getFirstTime(),
getPeriod()
);
}
public void destroy() {
logger.debug("LuceneTimerServlet.destroy() begin");
timer.cancel();
}
/**
* 從服務(wù)啟動(dòng)起算,第二天零時(shí)開(kāi)始執(zhí)行
*
* @return Timer第一次執(zhí)行時(shí)間
*/
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("開(kāi)始執(zhí)行時(shí)間:" + 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("時(shí)")
.append(calendar.get(Calendar.MINUTE)).append("分")
.append(calendar.get(Calendar.SECOND)).append("秒")
.toString();
}
/**
* 計(jì)算一天的時(shí)間間隔
* 一天24小時(shí)×每小時(shí)60分×每分60秒×1000
*
* @return 一天時(shí)間
*/
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>