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 }