package com.ripsoft.util;
import java.util.Calendar;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class TimerListener implements ServletContextListener{
private Timer timer = null;
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event.getServletContext().log("定时器已启动");
//设置执行时间
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);//每天
//定制每天的11:00:00执行
calendar.set(year, month, day, 11, 00, 00);
java.util.Date date = calendar.getTime();
int period = 30 * 1000;
//每天的date时刻执行TestTask,每隔30秒重复执行
timer.schedule(new TestTask(), date, period);
//每天的date时刻执行TestTask, 仅执行一次
//timer.schedule(new TestTask(), date);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
if (timer != null) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
}
package com.ripsoft.util;
import java.util.TimerTask;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class TestTask extends TimerTask{
protected final Log logger = LogFactory.getLog(getClass());
private static boolean isRunning = false;
@Override
public void run() {
if (!isRunning) {
isRunning = true;
logger.info("开始执行任务。");
int i = 0;
while (i++ < 10) {
logger.info("已完成任务的" + i + "/" + 10);
}
isRunning = false;
logger.info("任务执行结束。");
} else {
logger.info("上一次任务执行还未结束,本次任务不能执行。");
}
}
}
1.TestTimerListener.java执行定时任务,实现servlet的ServletContextListener接口,当服务器启动时开始执行TestTask任务
2.想要任务在服务器启动时定时执行,就要借助监听实现需要在web.xml中做如下配置
<listener>
<listener-class>com.ripsoft.util.TimerListener</listener-class>
</listener>