java listener实现定时任务

使用java ServletContextListener 实现各种简单定时任务。

1. 创建ServletContextListener,在3.0版本的web.xml中不再需要添加listener的声明。

 1 package com.test.listener;
 2 
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6 import java.util.Timer;
 7 
 8 import javax.servlet.ServletContextEvent;
 9 import javax.servlet.ServletContextListener;
10 import javax.servlet.annotation.WebListener;
11 
12 import com.test.job.timerJobTest;
13 import com.test.job.timerJobTest2;
14 @WebListener("This is my servlet3.0 listener")
15 public class MyServletContextListener implements ServletContextListener {
16     private Timer timer= null;
17     private Timer timer2= null;
18     @Override
19     public void contextDestroyed(ServletContextEvent arg0) {
20         // TODO Auto-generated method stub
21         System.out.println("servletContext被销毁");
22     }
23 
24     @Override
25     public void contextInitialized(ServletContextEvent arg0) {
26         // TODO Auto-generated method stub
27         System.out.println("servletContext 初始化");
28         timer= new Timer(true);//创建一个守护线程
29         timer2= new Timer(true);
30         timerJobTest tjb = new timerJobTest(); //创建要随容器启动的定时任务1
31         timerJobTest2 tjb2= new timerJobTest2();//创建要随容器启动的定时任务2
32         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
33         Date d1=null;
34         try {
35             d1 = sdf.parse("2016-08-01 21:28:10");
36         } catch (ParseException e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39         }
40         timer.schedule(tjb, d1);//任务1是指定时间执行
41         timer2.schedule(tjb2, 10*1000, 20*1000);//任务2是容器启动10秒以后,每20秒执行一次
42     }
43 }

2.创建任务类,任务类是继承了TimerTask 类,并重写了run方法,run方法中就是需要执行的代码段,也可以直接调用其他类

 1 package com.test.job;
 2 
 3 import java.util.TimerTask;
 4 
 5 public class timerJobTest extends TimerTask {
 6 
 7     @Override
 8     public void run() {
 9         // TODO Auto-generated method stub
10         System.out.println("定时任务1任务被执行");
11         
12     }
13 
14 }
 1 package com.test.job;
 2 
 3 import java.util.TimerTask;
 4 
 5 public class timerJobTest2 extends TimerTask {
 6 
 7     @Override
 8     public void run() {
 9         // TODO Auto-generated method stub
10         System.out.println("定时任务2任务被执行");
11         
12     }
13 
14 }
原文地址:https://www.cnblogs.com/Jeremy2001/p/6070642.html