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>

就可以了

原文地址:https://www.cnblogs.com/wdpnodecodes/p/8022042.html