在项目中有时经常会有这样一种情景,就是需要系统定时的执行一个任务,比如:向另外一个系统发送文件、发送消息、处理某些不需要实时性的信息等。这时,我们就用到了定时任务。
下面介绍java定时执行任务:
1、TestTimerListener.java执行定时任务,实现servlet的ServletContextListener接口,当服务器启动时开始执行TestTask任务,通过方法timer.scheduleAtFixedRate(new FulongTask(), 7 * 1000, 60 * 60 * 1000); // 每小时执行一次run方法 测试5秒5 * 1000执行TestTask.java的run方法
public class TestTimerListener implements ServletContextListener {
private Timer timer = null;
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event.getServletContext().log("定时器已启动");
timer.scheduleAtFixedRate(new TestTask(), 7 * 1000, 60 * 60 * 1000); // 每小时执行一次run方法 测试5秒5 * 1000
}
@Override
public void contextDestroyed(ServletContextEvent event) {
if (timer != null) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
}
public class TestTask extends TimerTask {
protected final Log logger = LogFactory.getLog(getClass());
private static boolean isRunning = false;
@Override
public void run() {
// 是否整点
// Calendar c = Calendar.getInstance();
// if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))
if (!isRunning) {
isRunning = true;
logger.info("开始执行任务。");
int i = 0;
while (i++ < 10) {
logger.info("已完成任务的" + i + "/" + 10);
}
isRunning = false;
logger.info("任务执行结束。");
} else {
logger.info("上一次任务执行还未结束,本次任务不能执行。");
}
}
}
2、想要任务在服务器启动时定时执行,就要借助监听实现需要在web.xml中做如下配置
cn.zk.listener.TestTimerListener