写在前面:

  在最近的项目中需要每天定时对数据库表进行查询,并完成相关数据的更新操作。首先让我想到的是Timer类,记得在一开始维护那个老系统的时候,开了个接口,也涉及到了定时的操作。下面就记录下大概的用法,方便后续工作中用到时再次查找方便。

  由于是用在web中,故当项目启动的时候,就应该去将这个定时任务给跑起来,这里用了监听器,当初始化的时候就去跑此定时程序,然后在定时程序中,根据自己的需求设置对应的执行时间,以及需要执行的任务类。

  1.首先写好我们需要执行的任务类

public class DailyReportTimerTask extends TimerTask{
public static Logger logger=Logger.getLogger(DailyReportTimerTask.class);
public void run() {
System.out.println("----开始执行任务--------------");
}
}

  任务类需要继承TimerTask,这点要注意下

  2.写一个类来管理程序开跑的任务类、时间以及频率

public class TimeManager {
public static Logger logger=Logger.getLogger(TimeManager.class);
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; //24小时执行一次
public TimeManager() { Calendar calendar = Calendar.getInstance();
/*** 定制每日23:10执行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 10);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime();
System.out.println(date); //如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
if (date.before(new Date())) {
date = this.addDay(date, 1);
System.out.println(date);
} Timer timer = new Timer();
    DailyReportTimerTask task = new DailyReportTimerTask(); //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task,date,PERIOD_DAY);
} //增加几天
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}

  3.为了能让项目初始化的时候,就去将此定时程序跑起来,可以使用监听器

public class DailyReportListener implements ServletContextListener{

    public void contextDestroyed(ServletContextEvent arg0) {

    }
public void contextInitialized(ServletContextEvent arg0) {
new TimeManager();
} }

  4.最后一步就是在web.xml文件中配置对应的监听器

<!--DailyReportTaskListener 监听器-->
<listener>
<listener-class>edu.hue.erp.util.timer.DailyReportListener</listener-class>
</listener>

  在web中开发一个完成定时任务的程序大致就是这个样子,对于具体执行的业务程序,需要根据自己的项目去完成即可。

java web定时任务---Timer的更多相关文章

  1. Java基础--定时任务Timer

    Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...

  2. Java基础--定时任务Timer(转载)

    Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...

  3. java web定时任务---quartz

    写在前面: 前面有简单的记录下Timer定时的用法,但是在此次项目中,选择的是quartz来完成定时操作任务的.两者都可以完成定时操作,但是spring可以整合quartz,并且配置起来也比较简便,还 ...

  4. 在Java Web项目中添加定时任务

    在Java Web程序中加入定时任务,这里介绍两种方式:1.使用监听器注入:2.使用Spring注解@Scheduled注入. 推荐使用第二种形式. 一.使用监听器注入 ①:创建监听器类: impor ...

  5. Servlet监听器与Timer定时器配合实现JAVA WEB应用简单自动作业

    在web应用中,有时候客户需要一些定时程序,不需要客户自己去操作,而是由应用程序自行触发执行某些操作.这个时候监听与定时器的配合使用就基本可以实现这个需求了. 1.创建一个监听的SERVELET,这个 ...

  6. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  7. java web实现计划定时任务

    java web实现定时计划任务 1.定义一个类继承TimerTask,在run方法中写上需要执行的逻辑 package com.mytask; import java.util.TimerTask; ...

  8. java定时任务Timer与ScheduledExecutorService<转>

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. ...

  9. JAVA定时任务Timer

    故事起因 因业务需要,写了一个定时任务Timer,任务将在每天的凌晨2点执行,代码顺利码完,一切就绪,开始测试.运行程序,为了节省时间,将系统时间调整为第二天凌晨1点59分,看着秒针滴答滴答的转动,期 ...

随机推荐

  1. APP本地服务安全测试

    一.安全测试基本分类: 1.系统安全 系统加固 安全加固:比如linux中关闭telnet端口,修改ssh端口 检测一些不必要的服务(需要卸载一个ping)--保证系统的最小集 app安全加固:加一层 ...

  2. 如何把SSL公钥和私钥转化为PFX格式

    1.登陆   https://myssl.com/cert_convert.html 2.原格式选择为 “PEM”,目标格式选择为 “PKCS12” 3.上传cer到 ”证书文件“,上传key到 ”私 ...

  3. js 扒一扒这些题目都考了哪些知识点

    1.空数组是true还是false 题目: <script> var tmp = 'a'; if([]==false) tmp+='b'; if(![]) tmp +='c'; alert ...

  4. linux网络编程系列-TCP/IP模型

    ### OSI:open system interconnection ### 开放系统互联网模型是由ISO国际标准化组织定义的网络分层模型,共七层 1. 物理层:物理定义了所有电子及物理设备的规范, ...

  5. 【CF103D】Time to Raid Cowavans(分块)

    题意: 思路:院赛防AK题,然而还没来得及做就被数据出锅的题坑了…… #include<cstdio> #include<cstring> #include<string ...

  6. 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居

    [算法]并查集+平衡树+数学+扫描线 [题解] 经典曼哈顿距离转切比雪夫距离. 曼哈顿距离:S=|x1-x2|+|y1-y2|<=c 即:max(x1-x2+y1-y2,x1-x2-y1+y2, ...

  7. MS笔试中的一个关于函数返回的“小”题

    Which of following C++ code is correct ? A. int f() { ); return *a; } B. int *f() { int a[3] = {1,2, ...

  8. linux C 中的volatile使用【转】

    转自:http://blog.csdn.net/sukhoi27smk/article/details/38020583 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器 ...

  9. pymysql 线程安全pymysqlpool

    # -*-coding: utf-8-*- # Author : Christopher Lee # License: Apache License # File : test_example.py ...

  10. Linux编写Shell脚本

    ——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...