专栏首页浩Coding车辆违章查询和限行提醒程序 -- (4) JavaWeb实现定时任务

车辆违章查询和限行提醒程序 -- (4) JavaWeb实现定时任务

今天我们要设置定时任务,用JavaWeb的方式实现。通过网上搜寻资料发现,这个定时任务的实现使用Spring框架比较简单,当然也可以用监听器注入配合Timer的方法实现,这里我们讲的是后者的实现方法。

一 创建监听器类

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
 * 能让项目初始化的时候,就去将此定时程序跑起来,可以使用监听器,但是要在web.xml文件中配置对应的监听器
 * @author hao
 */
public class CarTimerTaskListener implements ServletContextListener {
 
    public void contextInitialized(ServletContextEvent sce) {
         new TimerManager();
    }
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub         
    }
}

二 创建定时任务类

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
 
/**
 * java定时任务,每天定时执行任务
 * @author hao
 *
 */
public class TimerManager {
    //时间间隔
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;  //24小时执行一次
    public TimerManager() {
       Calendar calendar = Calendar.getInstance();  
       /*** 定制每日07:00执行方法 ***/
       calendar.set(Calendar.HOUR_OF_DAY, 07);
       calendar.set(Calendar.MINUTE, 0);
       calendar.set(Calendar.SECOND, 0);
       Date date=calendar.getTime();

       //如果第一次执行定时任务的时间 小于 当前的时间
       //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
       if (date.before(new Date())) {
           date = this.addDay(date, 1);
       }
      
       System.out.println("定时任务制定的时间为:"+date);
       Timer timer = new Timer();
       CarTimerTask task = new CarTimerTask();
       
       //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
       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();
      }
}

三 创建TimerTask类

/**
 * 具体的任务类
 * @author hao
 */
public class CarTimerTask extends TimerTask{
  public void run() {
        System.out.println("----开始执行任务--------------时间是:"+Utils.GetNowDate());
        //一些具体的任务逻辑
        SendEmail.Send("要发的邮件内容");
        SendMessage.Send("111111111", "短信内容");
    }
}

四 配置web.xml文件

<listener>
    <listener-class>com.bao.timer.CarTimerTaskListener</listener-class>
 </listener>

之后运行项目即可,程序会自动按照指定时间运行,实测代码没有bug。不过后期整合就 难说了。

这个系列短时间内暂且更新到这里,后期更新完SSM框架后,应该...会重构此项目,改的更好更自动化,暂且立个flag,回见啦,(* ̄rǒ ̄)

相关知识拓展链接:

https://www.cnblogs.com/dcncy/p/8205065.html

https://www.cnblogs.com/rese-t/p/7886651.html

https://www.cnblogs.com/eleven258/p/9671296.html

https://blog.csdn.net/comeonyangzi/article/details/70145190

本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7),作者:浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编程知识科普--(3)三层架构和 MVC 模式的区别与联系

    对于初学者来说,刚刚接触这两个概念,很有可能容易混淆,误以为是一个事物的两种叫法。但深入了解后会发现,二者的构建大有不同。所以,“混淆”未必就是一件坏事,当你从...

    浩Coding
  • Java EE实用教程笔记----(1)第1章 Java EE平台及开发入门

    最近从图书馆借了本JavaEE实用教程(第3版),打算学习SSH和SSM框架,特此做笔记,以飨读者.

    浩Coding
  • Java EE之SSM框架整合开发 -- (5) Spring的事务管理

    答:在代码中显式调用beginTransaction()、commit()、rollback()等事务处理相关的方法,这就是编程式事务管理。

    浩Coding
  • azkaban 编译

    solve
  • 回调在事件中的妙用 ### 回调: 回头调用,函数 A 的事先干完,回头再调用函数 B。事件中的使用。通过以上方式,可以中其本模块中调用其它模块变量,有些细节与严格意义上回调不一致,但基本思想一致

    函数 A 的参数为函数 B, 函数 B 被称为回调函数。至于为何要用参数的形式传入,而不是直接在 A 中直接调用 B 函数,主要是为了变量的灵活性考虑。 为何...

    用户2434869
  • Spring @Lookup实现单例bean依赖注入原型bean

    地址:https://www.jianshu.com/p/5254e1947d77

    用户1149268
  • Nilearn学习笔记2-从FMRI数据到时间序列

    通过前面的学习了解,我们知道最原始的Fmri数据是4维的,包含三围的空间信息和一维的时间。在实际应用中,我们更多的是利用大脑图像时间序列做研究分析,因为无法直接...

    锦小年
  • 浏览器 Event Loop 机制

    event loop是一个执行模型,在不同的地方有不同的实现。浏览器和NodeJS基于不同的技术实现了各自的Event Loop。

    小皮咖
  • UNPv13:#第1章#简介

    概述 ? TCP本身并不提供记录结束标志:如果应用程序需要确定记录的边界,它就要自己去实现,已有一些常用的方法可供选择。从TCP套接字读取数据时,我们总...

    _gongluck
  • 业界 | AI人才争夺战持续升级,数据看懂中国人工智能人才分布

    机器之心报道 编辑:吴欣 科技公司在人工智能领域的博弈日趋激烈,招揽 AI 人才关系到谁能在关键领域掌握迅速实现突破的机会。 5 月 2 日,腾讯宣布任命语音识...

    机器之心

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动