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. /*System.out.println("-----开始启动定时器------");
  31. Calendar twentyOne = Calendar.getInstance();
  32. twentyOne.set(Calendar.HOUR_OF_DAY, 14);
  33. twentyOne.set(Calendar.MINUTE, 47);
  34. twentyOne.set(Calendar.SECOND, 0);
  35. timer = new Timer(true);
  36. timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*10);*/
  37. }
  38.  
  39. }

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. }

java中定时器的简单使用的更多相关文章

  1. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

  2. 多线程(三) java中线程的简单使用

    java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...

  3. java中数据流的简单介绍

    java中的I/O操作主要是基于数据流进行操作的,数据流表示了字符或者字节的流动序列. java.io是数据流操作的主要软件包 java.nio是对块传输进行的支持 数据流基本概念 “流是磁盘或其它外 ...

  4. java中volatile的简单理解

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7833881.html 据说,volatile是java语言中最轻量级的并发控制方式. vo ...

  5. 关于JAVA中异常处理的简单阐释.

    ---恢复内容开始--- 这是我的一篇要在博客园发布的随笔,主要是简单的概括一下我本次所学的关于异常处理的知识.有讲的不妥当的地方,或者有需要补充的,还请各位高人给指点,共同学习,虚心求学.谢谢啦~ ...

  6. redis学习笔记(二)——java中jedis的简单使用

    redis怎么在java中使用,那就是要用到jedis了,jedis是redis的java版本的客户端实现,原本原本想上来就直接学spring整合redis的,但是一口吃个胖子,还是脚踏实地,从基础开 ...

  7. Java 中的instanceof简单讲解

    Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...

  8. JAVA中JNI的简单使用

    了解JNI:JAVA因其跨平台特性而受人们喜爱,也正因此,使得它和本机各种内部联系变得很少,所以JNI(Java Native Interface)就是用来解决JAVA本地操作的一种方式.JAVA通过 ...

  9. java中定时器总结

    java实现定时器的四种方式: 一. /** * 延迟20000毫秒执行 java.util.Timer.schedule(TimerTask task, long delay) */ public ...

随机推荐

  1. 分析 js构造函数:对象方法 、类方法 、原型方法

    构造函数方法有对象方法.类方法.原型方法,这些方法在什么时候可以调用,什么时候不能调用,为什么? function Func(name){ this.name=name; this.ff=functi ...

  2. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

  3. Zuul之Filter详解

    Zuul详解 官方文档:https://github.com/Netflix/zuul/wiki/How-it-Works Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列 ...

  4. 【带着canvas去流浪(4)】绘制散点图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四.散点hover交互效果的实现 4.1 基本算法 4.2 参考代码 4.3 Demo中的小问题 示例代码托管在:http://www.githu ...

  5. 远程连接桌面报:这可能是由于credssp加密oracle修正

      1.Win+R 输入regedit打开注册表 找到对应的以下目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Polic ...

  6. element表格添加序号

    表格代码:黄色部分为序号列关键代码上图: <el-table :data="tableData" border height="480" style=&q ...

  7. 关于asp.net执行exe程序时权限不够的解决办法(2015.04.17更新)

    一,本文背景 长话短说:asp.net项目中需要用到PDF转换成SWF文件,用户上传后自动调用pdf2swf.exe转换. 但有个问题,执行时权限不够,导致一直报错(滚动条一直在往下滚,刷屏中),见下 ...

  8. FreeNas搭建踩坑指南(二)

    0x00 权限配置 FreeNas完成后配置用户组及权限,新建用户和用户组后添加Samba共享(Windows模式),无法准确控制权限,尝试在系统中修改权限提示"Operation not ...

  9. Input 标签 安卓 与 IOS 出现圆角 显示

    Input 标签 input[type="submit"],input[type="reset"],input[type="button"] ...

  10. [算法&数据结构]深度优先搜索(Depth First Search)

    深度优先 搜索(DFS, Depth First Search) 从一个顶点v出发,首先将v标记为已遍历的顶点,然后选择一个邻接于v的尚未遍历的顶点u,如果u不存在,本次搜素终止.如果u存在,那么从u ...