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

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

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

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

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

public void contextInitialized(ServletContextEvent arg0){

}

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

具体代码如下:

web.xml添加:

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

MyTimerTaskListener.java

 package com.dcits.app.servlet;

 import java.util.Calendar;
import java.util.Timer; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author Weiyongle
* @time 2017-5-5 下午2:05:32
*/
public class MyTimerTaskListener implements ServletContextListener {
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
} @Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("-----开始启动定时器------");
Calendar twentyOne = Calendar.getInstance();
twentyOne.set(Calendar.HOUR_OF_DAY, 23);
twentyOne.set(Calendar.MINUTE, 0);
twentyOne.set(Calendar.SECOND, 0);
timer = new Timer(true);
//第一次是晚上23点执行,间隔24小时执行一次
timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*60*60*24); /*System.out.println("-----开始启动定时器------");
Calendar twentyOne = Calendar.getInstance();
twentyOne.set(Calendar.HOUR_OF_DAY, 14);
twentyOne.set(Calendar.MINUTE, 47);
twentyOne.set(Calendar.SECOND, 0);
timer = new Timer(true);
timer.schedule(new MyTimerTask(), twentyOne.getTime(), 1000*10);*/
} }

MyTimerTask.java

 package com.dcits.app.servlet;

 import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.TimerTask; import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
/**
* 定时器,用于补偿认证的时候没有获取到正常返回的那些数据
* @author Weiyongle
* @time 2017-5-5 下午2:20:12
*/
public class MyTimerTask extends TimerTask{
private static StringBuffer url = new StringBuffer();
@Override
public void run() {
//生产环境
// url.append("https://我是具体的ip地址/nmsypt/servlet/webServlet");//生产环境
url.append("http://localhost:8080/adp/servlet/webServlet");//本地环境
Map<String,Object> reqMap = new HashMap<String,Object>();
//这里的map从数据库里获取对应的数据不写死就行了,先获取map,在写个for循环进行循环就行了
reqMap.put("QYMC","丹同学的公司");
reqMap.put("NSRSBH","158028307441234");
reqMap.put("SJHM_FR","15802830744");
reqMap.put("YZM","123456");
reqMap.put("CWFZR","");//
reqMap.put("ZJLX_DM_CW","");//
reqMap.put("ZJHM_CW","");//
reqMap.put("ZGRS","1234");
reqMap.put("SQYY","");//
reqMap.put("JRCPBM","00002");
reqMap.put("XYDM","1");
reqMap.put("XZQHDM","");
reqMap.put("QYBM","QY17900000647001");
try {
CompensateData.CompensateDatas(url.toString(), reqMap);
System.out.println("-----成功补偿了一条认证信息------");
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }

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. Android上的Badge,快速实现给应用添加角标

    应用角标是iOS的一个特色,原生Android并不支持.或许是因为当时iOS的通知栏比较鸡肋(当然现在已经改进了很多),而Android的通知栏功能强大?所以才出现了一方依赖于数字角标,一方坚持强大的 ...

  2. swagger文档转换为WebApiClient声明式代码

    1 swagger简介 Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful Web Service.其核心是使用json来规范描述RESTful接口,另外有提供UI来查看 ...

  3. 全内存的redis用习惯了?那能突破内存限制类redis产品ssdb呢?

    首先说一下背景,在双十一的时候,我们系统接受X宝的订单推送,同事原先的实现方式是使用redis的List作为推送数据的承载,在非大促的场景下, 一切运行正常,内存占用大概3-4G,机器是16G内存.由 ...

  4. Reactive Extensions 相见恨晚的Rx.Net

    何为Reactive Extensions(Rx) Rx是一个遵循函数式编程的类库,它引用观察者以及迭代器设计模式对可观察对象产生的数据进行异步消费.使用Rx, 开发人员将使用LINQ运算符操作异步数 ...

  5. 浅析Servlet执行原理

    在JavaWeb学习研究中,Servlet扮演重要的作用,学好它,是后续JavaWeb学习的良好基础.无论是SSH,还是SSM,微服务JavaWeb技术,都应先学好Servlet,从而达到事半功倍的效 ...

  6. sql:常用函数

    1.验证是否是null,是则替换ISNULL(Weight, 50) SELECT AVG(ISNULL(Weight, 50))FROM Production.Product; 2.连接多个字符串  ...

  7. bootstrap tooltips在 angularJS中的使用

    使用bootstrap自带的提示控件,省去了不少事情 <div class="s2" ng-init="InitTooltip()"> <in ...

  8. PHPCMS V9 添加二级导航

    今天看了看phpcms 写到二级导航时发现点问题,查询导航栏的信息时返回的$r[arrchildid]与自己想象的不符,文档上说是返回子栏目id但是却有些不同. 开始的思路: <ul class ...

  9. ArcEngine ILabelEngineLayerProperties Expression 添加常量

    ArcEngine实现复杂标注的时候,需要结合几个字段并将常量加载表达式中. 开始的时候发现VBScript需要采用“”来括起来常量才能在VB中正常使用,但是 ILabelEngineLayerPro ...

  10. arcgis api 4.x for js之图层管理篇

    上篇实现了基础地图加载以及二三维模式切换:本篇的内容则是图层管理控制,从两个不同角度来实现,分别是直接绑定arcgis api提供的图层管理widget(LayerList)以及自定义图层管理图标的点 ...