java中定时器的简单使用
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中定时器的简单使用的更多相关文章
- Java中定时器Timer致命缺点(附学习方法)
简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...
- 多线程(三) java中线程的简单使用
java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...
- java中数据流的简单介绍
java中的I/O操作主要是基于数据流进行操作的,数据流表示了字符或者字节的流动序列. java.io是数据流操作的主要软件包 java.nio是对块传输进行的支持 数据流基本概念 “流是磁盘或其它外 ...
- java中volatile的简单理解
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7833881.html 据说,volatile是java语言中最轻量级的并发控制方式. vo ...
- 关于JAVA中异常处理的简单阐释.
---恢复内容开始--- 这是我的一篇要在博客园发布的随笔,主要是简单的概括一下我本次所学的关于异常处理的知识.有讲的不妥当的地方,或者有需要补充的,还请各位高人给指点,共同学习,虚心求学.谢谢啦~ ...
- redis学习笔记(二)——java中jedis的简单使用
redis怎么在java中使用,那就是要用到jedis了,jedis是redis的java版本的客户端实现,原本原本想上来就直接学spring整合redis的,但是一口吃个胖子,还是脚踏实地,从基础开 ...
- Java 中的instanceof简单讲解
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...
- JAVA中JNI的简单使用
了解JNI:JAVA因其跨平台特性而受人们喜爱,也正因此,使得它和本机各种内部联系变得很少,所以JNI(Java Native Interface)就是用来解决JAVA本地操作的一种方式.JAVA通过 ...
- java中定时器总结
java实现定时器的四种方式: 一. /** * 延迟20000毫秒执行 java.util.Timer.schedule(TimerTask task, long delay) */ public ...
随机推荐
- 分析 js构造函数:对象方法 、类方法 、原型方法
构造函数方法有对象方法.类方法.原型方法,这些方法在什么时候可以调用,什么时候不能调用,为什么? function Func(name){ this.name=name; this.ff=functi ...
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- Zuul之Filter详解
Zuul详解 官方文档:https://github.com/Netflix/zuul/wiki/How-it-Works Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列 ...
- 【带着canvas去流浪(4)】绘制散点图
目录 一. 任务说明 二. 重点提示 三. 示例代码 四.散点hover交互效果的实现 4.1 基本算法 4.2 参考代码 4.3 Demo中的小问题 示例代码托管在:http://www.githu ...
- 远程连接桌面报:这可能是由于credssp加密oracle修正
1.Win+R 输入regedit打开注册表 找到对应的以下目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Polic ...
- element表格添加序号
表格代码:黄色部分为序号列关键代码上图: <el-table :data="tableData" border height="480" style=&q ...
- 关于asp.net执行exe程序时权限不够的解决办法(2015.04.17更新)
一,本文背景 长话短说:asp.net项目中需要用到PDF转换成SWF文件,用户上传后自动调用pdf2swf.exe转换. 但有个问题,执行时权限不够,导致一直报错(滚动条一直在往下滚,刷屏中),见下 ...
- FreeNas搭建踩坑指南(二)
0x00 权限配置 FreeNas完成后配置用户组及权限,新建用户和用户组后添加Samba共享(Windows模式),无法准确控制权限,尝试在系统中修改权限提示"Operation not ...
- Input 标签 安卓 与 IOS 出现圆角 显示
Input 标签 input[type="submit"],input[type="reset"],input[type="button"] ...
- [算法&数据结构]深度优先搜索(Depth First Search)
深度优先 搜索(DFS, Depth First Search) 从一个顶点v出发,首先将v标记为已遍历的顶点,然后选择一个邻接于v的尚未遍历的顶点u,如果u不存在,本次搜素终止.如果u存在,那么从u ...