版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/71194454
java web使用监听器实现定时周期性执行任务的功能在做web项目的时候,有时需要做个定时的功能去执行某个
任务,或者定时周期性去执行某个任务,如定时邮件发送、文件删除等。那么,我们就需要借助监听器去实现这一个
功能,具体的实现过程如下:
1.配置web.xml,添加监听器指定类
<!-- 定时监听器配置 -->
<listener>
<listener-class>listener.DuetimeListener</listener-class>
</listener>
2.监听类实现ServletContextListener接口,实现监听功能
public class DuetimeListener implements ServletContextListener{
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
@Override
public void contextInitialized(ServletContextEvent event) {
// 添加tomcat日志
event.getServletContext().log("定时器已启动");
System.out.println("定时器启动");
try {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时,24小时制
calendar.set(Calendar.MINUTE, 0); // 控制分
calendar.set(Calendar.SECOND, 0); // 控制秒
Date time = calendar.getTime(); // 执行任务的时间,可自行修改,此时为12:00:00
timer = new Timer(true);
//参数1:需要执行的类,参数2:执行时间,参数3:执行周期(参数可自行修改)
//类需要继承util的TimeTask,默认执行类下的run()方法;
timer.scheduleAtFixedRate(new TestTimeTask(), time, 1000 * 60 * 60 * 24); //隔一天(周期性)扫描执行方法,
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.功能类继承TimerTask类,默认执行run方法
public class TestTimeTask extends TimerTask {
@Override
public void run() {
System.out.println("定时扫描监听器程序开始执行,发送邮件");
deleteFile();
sendEmail();
//to do
}
public boolean deleteFile(){
System.out.println("定时执行删除文件的方法");
return true;
//to do
}
public boolean sendEmail(){
System.out.println("定时执行发送邮件的方法");
return true;
//to do
}
}
4.该demo,只用到web.xml、DuetimeListener.java、TestTimeTask.java三个文件,只是实现定时监听、周期
性执行任务的功能,而邮件发送、文件删除等自定义功能需要自行添加上去,只需在run方法下修改邮件发送、文件
删除等功能即可;
5.demo链接:http://download.csdn.net/detail/alan_liuyue/9834172