无非就是两种方法
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("开始创建索引@" + 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>