欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java web使用监听器实现定时周期性执行任务的功能

程序员文章站 2022-07-14 18:33:22
...

    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