zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    大型网站调试工具之一(php性能优化分析工具XDebug)
    2.0控件之Border, Button, Calendar, Canvas, CheckBox, ComboBox
    C#程序开发范例_IC卡读写
    数据库连接池技术
    控件之DataGrid, DatePicker, Grid, GridSplitter, HyperlinkButton, Image
    软件工程师职业总结
    "EMQ Meetup北京"技术沙龙分享会
    EMQ X Enterprise 新功能 Rule Engine 介绍
    基于 MySQL 的 EMQ X Auth & ACL
    MQTT 5.0 新特性(三)— 有效载荷标识与内容类型
  • 原文地址:https://www.cnblogs.com/Sunnor/p/6813098.html
Copyright © 2011-2022 走看看