java中定时器的简单使用

  

 1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,容器一启动所以监听器也就跟着启动,然后定时器就可以工作了。

第一步,把自己写的监听器加到web.xml中;

第二步,写一个监听器,实现ServletContextListener接口;

第三步,写一个定时器,继承TimerTask,在复写的run()方法里写具体的业务逻辑。

第四步,在自己的监听器里复写的

public void contextInitialized(ServletContextEvent arg0){

}

这个方法里调用定时器的schedule方法。

具体代码如下:

web.xml添加:

1 <!-- 用于补偿认证信息异常的数据,用来启动定时器,20170505 -->
2     <listener>
3         <listener-class>com.dcits.app.servlet.MyTimerTaskListener</listener-class>
4     </listener>

MyTimerTaskListener.java

 1 package com.dcits.app.servlet;
 2 
 3 import java.util.Calendar;
 4 import java.util.Timer;
 5 
 6 import javax.servlet.ServletContextEvent;
 7 import javax.servlet.ServletContextListener;
 8 /**
 9  * @author Weiyongle
10  * @time 2017-5-5 下午2:05:32
11  */
12 public class MyTimerTaskListener implements ServletContextListener {
13     private Timer timer = null;
14     @Override
15     public void contextDestroyed(ServletContextEvent arg0) {
16         timer.cancel();
17     }
18 
19     @Override
20     public void contextInitialized(ServletContextEvent arg0) {
21         System.out.println("-----开始启动定时器------");
22         Calendar twentyOne = Calendar.getInstance();
23         twentyOne.set(Calendar.HOUR_OF_DAY, 23);
24         twentyOne.set(Calendar.MINUTE, 0);
25         twentyOne.set(Calendar.SECOND, 0);
26         timer = new Timer(true);
27         //第一次是晚上23点执行,间隔24小时执行一次
28         timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*60*60*24);
29         
30         
31         /*System.out.println("-----开始启动定时器------");
32         Calendar twentyOne = Calendar.getInstance();
33         twentyOne.set(Calendar.HOUR_OF_DAY, 14);
34         twentyOne.set(Calendar.MINUTE, 47);
35         twentyOne.set(Calendar.SECOND, 0);
36         timer = new Timer(true);
37         timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*10);*/
38     }
39     
40 }

MyTimerTask.java

 1 package com.dcits.app.servlet;
 2 
 3 import java.io.IOException;
 4 import java.util.HashMap;
 5 import java.util.Map;
 6 import java.util.TimerTask;
 7 
 8 import org.codehaus.jackson.JsonGenerationException;
 9 import org.codehaus.jackson.map.JsonMappingException;
10 /**
11  * 定时器,用于补偿认证的时候没有获取到正常返回的那些数据
12  * @author Weiyongle
13  * @time 2017-5-5 下午2:20:12
14  */
15 public class MyTimerTask extends TimerTask{
16     private static StringBuffer url = new StringBuffer();
17     @Override
18     public void run() {
19         //生产环境
20 //        url.append("https://我是具体的ip地址/nmsypt/servlet/webServlet");//生产环境
21         url.append("http://localhost:8080/adp/servlet/webServlet");//本地环境
22         Map<String,Object> reqMap = new HashMap<String,Object>();
23         //这里的map从数据库里获取对应的数据不写死就行了,先获取map,在写个for循环进行循环就行了
24         reqMap.put("QYMC","丹同学的公司");
25         reqMap.put("NSRSBH","158028307441234");
26         reqMap.put("SJHM_FR","15802830744");
27         reqMap.put("YZM","123456");
28         reqMap.put("CWFZR","");//
29         reqMap.put("ZJLX_DM_CW","");//
30         reqMap.put("ZJHM_CW","");//
31         reqMap.put("ZGRS","1234");
32         reqMap.put("SQYY","");//
33         reqMap.put("JRCPBM","00002");
34         reqMap.put("XYDM","1");
35         reqMap.put("XZQHDM","");
36         reqMap.put("QYBM","QY17900000647001");
37         try {
38             CompensateData.CompensateDatas(url.toString(), reqMap);
39             System.out.println("-----成功补偿了一条认证信息------");
40         } catch (JsonGenerationException e) {
41             e.printStackTrace();
42         } catch (JsonMappingException e) {
43             e.printStackTrace();
44         } catch (IOException e) {
45             e.printStackTrace();
46         }
47     }
48 
49 }
原文地址:https://www.cnblogs.com/Sunnor/p/6813098.html