实例讲解java定时任务_java

今天为大家分享的一个经验就是java的定时任务,就是说在一天的某个时间点执行以下代码。

public class TimerManager {

 //时间间隔
 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

 public TimerManager() {
 Calendar calendar = Calendar.getInstance();

 /*** 定制每日2:00执行方法 ***/

 calendar.set(Calendar.HOUR_OF_DAY, 2);
 calendar.set(Calendar.MINUTE, 0);
 calendar.set(Calendar.SECOND, 0);

 Date date=calendar.getTime(); //第一次执行定时任务的时间

 //如果第一次执行定时任务的时间 小于 当前的时间
 //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
 if (date.before(new Date())) {
   date = this.addDay(date, 1);
 }

 Timer timer = new Timer();

 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
 //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
 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();
 }

}

在TimerManager 这个类里面,大家一定要注意时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。

public class NFDFlightDataTimerTask extends TimerTask {

 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);

 @Override
 public void run() {
 try {
  //在这里写你要执行的内容

 } catch (Exception e) {
  log.info("-------------解析信息发生异常--------------");
 }
 }
}

public class NFDFlightDataTaskListener implements ServletContextListener {

 public void contextInitialized(ServletContextEvent event) {
 new TimerManager();
 }

 public void contextDestroyed(ServletContextEvent event) {
 }

}

然后要在web.xml里面配置监听器

<listener>
 <listener-class>
 com.listener.NFDFlightDataTaskListener
 </listener-class>
</listener>

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 定时任务
java定时任务
java定时任务实例、java定时器timer实例、kettle 定时任务 实例、spring定时任务实例、spark 定时任务实例,以便于您获取更多的相关知识。

时间: 2024-11-01 03:55:18

实例讲解java定时任务_java的相关文章

实例讲解Java编程中数组反射的使用方法_java

什么是反射"反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为."这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释: 内省用于在运行时检测某个对象的类型和其包含的属性: 反射用于在运行时检测和修改某个对象的结构及其行为. 从它们的定义可以看出,内省是反射的一个子集.有些语言支持内省,但并不支持反射,如C++. 内省示例:instanceof 运算符用于检测某个对象是否属于特定的类. if (obj insta

实例讲解Java批量插入、更新数据_java

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

实例讲解Java的设计模式编程中责任链模式的运用_java

定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.类型:行为类模式类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }else if(i == 3){ Handler3.r

实例讲解Java的MyBatis框架对MySQL中数据的关联查询_java

mybatis 提供了高级的关联查询功能,可以很方便地将数据库获取的结果集映射到定义的Java Bean 中.下面通过一个实例,来展示一下Mybatis对于常见的一对多和多对一关系复杂映射是怎样处理的. 设计一个简单的博客系统,一个用户可以开多个博客,在博客中可以发表文章,允许发表评论,可以为文章加标签.博客系统主要有以下几张表构成: Author表:作者信息表,记录作者的信息,用户名和密码,邮箱等. Blog表   :  博客表,一个作者可以开多个博客,即Author和Blog的关系是一对多.

实例讲解Java并发编程之闭锁_java

闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有任何线程可以通过,当到达结束状态时,这扇门才会打开并容许所有线程通过.它可以使一个或多个线程等待一组事件发生.闭锁状态包括一个计数器,初始化为一个正式,正数表示需要等待的事件数量.countDown方法递减计数器,表示一个事件已经发生,而await方法等待计数器到达0,表示等待的事件已经发生.CountDownLatch强调的是一个线程(或多个)需要等待另外的n个线程干完某件事情之后才能继续执行. 场景应用: 10个运动员准备赛

详解java定时任务_java

 在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. 一.简介      在java中一个完整定时任务需要由Timer.TimerTask两个类来配合完成. API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.由TimerTask:Timer 安排为一次执行或重复执行的任务.

实例讲解Java的Spring框架中的控制反转和依赖注入_java

近来总是接触到 IoC(Inversion of Control,控制反转).DI(Dependency Injection,依赖注入)等编程原则或者模式,而这些是著名 Java 框架 Spring.Struts 等的核心所在.针对此查了 Wikipedia 中各个条目,并从图书馆借来相关书籍,阅读后有些理解,现结合书中的讲解以及自己的加工整理如下:   eg1问题描述: 开发一个能够按照不同要求生成Excel或 PDF 格式的报表的系统,例如日报表.月报表等等.   解决方案: 根据"面向接口

实例讲解Java的Spring框架中的AOP实现_java

简介面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足. 除了类(classes)以外,AOP提供了 切面.切面对关注点进行模块化,例如横切多个类型和对象的事务管理. (这些关注点术语通常称作 横切(crosscutting) 关注点.) Spring的一个关键的组件就是 AOP框架. 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更加完善.

实例讲解Java并发编程之ThreadLocal类_java

ThreadLocal类可以理解为ThreadLocalVariable(线程局部变量),提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回当前执行线程在调用set时设置的最新值.可以将ThreadLocal<T>视为 包含了Map<Thread,T>对象,保存了特定于该线程的值. 概括起来说,对于多线程资源共享的问题,同步机制采用了"以时间换空间"的方式,而ThreadLocal采用了"以空间