java中服务器启动执行定时任务
在项目中有时经常会有这样一种情景,就是需要系统定时的执行一个任务,比如:向另外一个系统发送文件、发送消息、处理某些不需要实时性的信息等。这时,我们就用到了定时任务。
下面介绍java定时执行任务:
1、TestTimerListener.java执行定时任务,实现servlet的ServletContextListener接口,当服务器启动时开始执行TestTask任务,通过方法timer.scheduleAtFixedRate(new FulongTask(), 7 * 1000, 60 * 60 * 1000); // 每小时执行一次run方法 测试5秒5 * 1000执行TestTask.java的run方法
1 import java.util.Timer; 2 3 import javax.servlet.ServletContextEvent; 4 import javax.servlet.ServletContextListener; 5 6 public class TestTimerListener implements ServletContextListener { 7 8 private Timer timer = null; 9 10 @Override 11 public void contextInitialized(ServletContextEvent event) { 12 timer = new Timer(true); 13 event.getServletContext().log("定时器已启动"); //60 * 60 * 1000 14 // 服务器启动后,延迟7秒启动,5秒执行一次 15 timer.scheduleAtFixedRate(new TestTask(), 7 * 1000, 5 * 1000); // 每小时执行一次run方法 测试5秒5 * 1000 16 } 17 18 @Override 19 public void contextDestroyed(ServletContextEvent event) { 20 if (timer != null) { 21 timer.cancel(); 22 event.getServletContext().log("定时器销毁"); 23 } 24 } 25 }
1 import java.util.TimerTask; 2 3 public class TestTask extends TimerTask { 4 5 private static boolean isRunning = false; 6 7 @Override 8 public void run() { 9 // 是否整点 10 // Calendar c = Calendar.getInstance(); 11 // if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)) 12 13 if (!isRunning) { 14 15 isRunning = true; 16 System.out.println("开始执行任务。"); 17 18 int i = 0; 19 while (i++ < 10) { 20 System.out.println("已完成任务的" + i + "/" + 10); 21 } 22 23 isRunning = false; 24 System.out.println("任务执行结束。"); 25 26 } else { 27 System.out.println("上一次任务执行还未结束,本次任务不能执行。"); 28 } 29 30 } 31 }
最后,在web.xml文件中配置:
1 <listener> 2 <listener-class>com.common.TestTimerListener</listener-class> 3 </listener>
就可以了