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. IntelliJ IDEA~gradle环境配置

    Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置. Int ...

  2. JPA中EntityListeners注解的使用

    使用场景 EntityListeners在jpa中使用,如果你是mybatis是不可以用的 它的意义 对实体属性变化的跟踪,它提供了保存前,保存后,更新前,更新后,删除前,删除后等状态,就像是拦截器一 ...

  3. matplotlib与numpy

    import matplotlib.pyplot as pltimport numpy as np y = df.loc[0:100, 4].valuesy = np.where(y == 'Iris ...

  4. springcloud情操陶冶-springcloud config server(二)

    承接前文springcloud情操陶冶-springcloud config server(一),本文将在前文的基础上讲解config server的涉外接口 前话 通过前文笔者得知,cloud co ...

  5. .NET(C#、VB)移动开发——Smobiler平台控件介绍:TextTabBar控件

    TextTabBar控件 一.          样式一 我们要实现上图中的效果,需要如下的操作: 从工具栏上的“Smobiler Components”拖动一个TextTabBar控件到窗体界面上 ...

  6. Ubuntu16.04安装opencv-3.4.2

    原文链接: https://m.oldpan.me/archives/ubuntu-install-opencv-from-source 第一步:更新我们的系统 sudo apt-get update ...

  7. 在java中如何实现字符串的反转

    如 "abcdt" 反转之后是 "tdcba" 思路1: 运用递归的方法进行反转 假设反转方法为 reverseString(String str)1)当字符串 ...

  8. MySQL逻辑架构概述

    1.MySQL逻辑架构 MySQL逻辑架构图 MySQL逻辑架构分四层 1.连接层:主要完成一些类似连接处理,授权认证及相关的安全方案. 2.服务层:在 MySQL据库系统处理底层数据之前的所有工作都 ...

  9. Android,View转换bitmap,bitmap转换drawable

    Android View转换Bitmap,Bitmap转换Drawable //测试设置bitmap View view1 = ViewGroup.inflate(context, R.layout. ...

  10. Android 最简单的测试UI卡顿

    就两个类: public class BlockDetectByPrinter { private static final String START = ">>>> ...