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. Win32对话框程序(1)

    之前学C语言是一直都是在控制台下面操作的,面对的都是黑框框,严重的打击了学习的兴趣.后来在TC下进行C语言课程设计,做了图形界面编程,但都是点线面画的…… 中间隔了好长一段时间没有碰过C语言,最近才开 ...

  2. FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]

    1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google. ...

  3. ASP.NET Core 2.1的配置、AOP、缓存、部署、ORM、进程守护、Nginx、Polly【源码】

    ps:废话不多说.直接上代码:源码地址:https://github.com/786744873/Asp.Net-Core-2.1-All-Demos/tree/master/src Configur ...

  4. Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析

    前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...

  5. DS控件库 DSLed控件呈现滚动字幕效果

    滚动字幕效果在DSled上可以使用偏移来实现,代码如下 运行效果

  6. .net MVC +EF+VUE做回合制游戏(二)

    Emmm,游戏中的属性购买页面 话不多说先上代码 <form id="vue" action="/ltgdGame.Web/Main/Index" met ...

  7. 编程心法 之 怎么选择合适的IDE

    一般情况下,使用IDE进行开发可以极大的提高开发效率 最佳选择 如果语言是GNU开源的则Eclipse,因为Eclipse就是开源的 例如C和C++这样的底层语言并且经典的语言,基于GNU的语言,推荐 ...

  8. 多线程之Thread

    Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数. Thread类默认创建的是前台线程,所以我 ...

  9. .net 笔试面试总结(3)

    什么是Sql注入?如何避免Sql注入? 用户根据系统的程序构造非法的参数从而导致程序执行不是程序期望的恶意Sql语句. 使用参数化的Sql就可以避免Sql注入. 数据库三范式是什么? 第一范式:字段不 ...

  10. 【AO例子】生成TIN

    当然,通过GP生成也是可以的.这里介绍的是已经烂大街的生成方法. 上代码: public ITin CreateTin(IFeatureClass featureClass, IField Z, st ...