1.首先確定是容器一啓動就要啓動定時器,因此咱們能夠選擇把定時器寫在一個監聽器裏,容器一啓動因此監聽器也就跟着啓動,而後定時器就能夠工做了。java
第一步,把本身寫的監聽器加到web.xml中;web
第二步,寫一個監聽器,實現ServletContextListener接口;數據庫
第三步,寫一個定時器,繼承TimerTask,在複寫的run()方法裏寫具體的業務邏輯。app
第四步,在本身的監聽器裏複寫的ide
public void contextInitialized(ServletContextEvent arg0){url
}spa
這個方法裏調用定時器的schedule方法。code
具體代碼以下:xml
web.xml添加:blog
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 }