JAVA定时执行任务,每天定时几点钟执行任务

JAVA定时执行任务,每天定时几点钟执行任务的示例如下:

1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下:

 1 package com.pcitc.time;
 2
 3 import java.util.Calendar;
 4 import java.util.Date;
 5 import java.util.Timer;
 6
 7 public class TimerManager {
 8
 9      //时间间隔
10      private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
11
12      public TimerManager() {
13       Calendar calendar = Calendar.getInstance();
14
15       /*** 定制每日2:00执行方法 ***/
16
17       calendar.set(Calendar.HOUR_OF_DAY, 2);
18       calendar.set(Calendar.MINUTE, 0);
19       calendar.set(Calendar.SECOND, 0);
20
21       Date date=calendar.getTime(); //第一次执行定时任务的时间
22
23       //如果第一次执行定时任务的时间 小于 当前的时间
24       //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
25       if (date.before(new Date())) {
26           date = this.addDay(date, 1);
27       }
28
29       Timer timer = new Timer();
30
31       NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
32       //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
33       timer.schedule(task,date,PERIOD_DAY);
34      }
35
36      // 增加或减少天数
37      public Date addDay(Date date, int num) {
38       Calendar startDT = Calendar.getInstance();
39       startDT.setTime(date);
40       startDT.add(Calendar.DAY_OF_MONTH, num);
41       return startDT.getTime();
42      }
43
44     }

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

2.建立NFDFlightDataTimerTask类,调用业务代码的类放在该类的run方法里面执行。

 1 package com.pcitc.time;
 2
 3 import java.util.TimerTask;
 4
 5 import com.sun.istack.internal.logging.Logger;
 6
 7 public class NFDFlightDataTimerTask extends TimerTask {
 8
 9     private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
10
11     @Override
12     public void run() {
13         try {
14             // 在这里写你要执行的内容
15             System.out.println("功能方法写在这里了...");
16         } catch (Exception e) {
17             log.info("-------------解析信息发生异常--------------");
18         }
19     }
20 }

3.在web容器中使用的话,可以配置上下文监听器,使容器在启动的时候加载该监听器,代码如下:

 1 package com.pcitc.time;
 2
 3 import javax.servlet.ServletContextEvent;
 4 import javax.servlet.ServletContextListener;
 5
 6 public class NFDFlightDataTaskListener implements ServletContextListener {
 7
 8     public void contextInitialized(ServletContextEvent event) {
 9         new TimerManager();
10     }
11
12     public void contextDestroyed(ServletContextEvent event) {
13     }
14
15 }

4.在web.xml里面配置监听器

<listener>
 <listener-class>
  com.pcitc.time.NFDFlightDataTaskListener
 </listener-class>
</listener>
时间: 2024-09-30 21:29:46

JAVA定时执行任务,每天定时几点钟执行任务的相关文章

SqlServer定时备份数据库和定时杀死数据库死锁解决

PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的.需要我们手动开启的. 执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了.但是还没有达到定时备份的目的 ? 1 2 3 4 5 6 7 8 9 10 11 --自动备份并保存最近5天的SQL数据库作业脚本 宋彪 20130310 DECLARE @filename VARCHA

改进版重启java 程序,及配合ansible yml 批量执行

原先的lsof -i:port 方式重启java 程序经常会有些小问题,这里改进了新脚本,并且结合ansilbe 使用,直接上脚本和样例. restat-tm.sh #!/bin/bash JAVA_HOME="/usr/local/java/jdk1.8.0_25" ###jdk APP_MAINCLASS="TM" ###TM.jar APP_HOME="/home/java/tm" ####/home/java/tm/*** #java虚拟

java并发编程实战学习笔记之任务执行

第六章 任务执行 6.1 在线程中执行任务 串行->多线程->有限个多线程 6.2 executor框架 通过有界队列可以防止高负荷程序过度消耗内存 java.lang.concurrent提供了线程池作为实现executor框架的一部分 executor接口:提供生产者-消费者模式 基于executor的web服务器: public class TaskExecutionWebServer {     private static final int NTHREADS = 100;     

JAVA中调用CMD命令,并输出执行结果

package com.wzw.util; import java.io.BufferedReader; import java.io.InputStreamReader; public class CmdDemo { public static void main(String[] args) { BufferedReader br = null; try { Process p = Runtime.getRuntime().exec("net user"); br = new Bu

Java try、catch、finally及finally执行顺序详解(转)

1.为什么要用finally先看一个没有finally的异常处理try-catch语句:假设count为要使用到的资源,并且用完要求释放此资源.那么我们可以把释放资源的语句放到try-catch后执行,当前的程序不管是在执行完try语句块还是catch语句块,都会顺序执行到下面释放资源的语句. int count = 0; //初始化资源 try{ count++; if(count == 1) throw new Exception("Exception in try"); }cat

把Java程序打包成jar文件包并执行

把Java程序打包成jar文件包并执行 1.首先要确认自己写的程序有没有报错. 2.第一次我写的是Web Project到现在,我一直没有执行成功,所以最好创建的是java Project 打包步骤: 1.在项目上,右键,选择Export. 2.进入到下图界面,选择Java 下面的JAR file 3.选择项目,确认必要的文件是否选中,选择保存jar文件包的路径,如下图 4.完成步骤3之后,点击Next,进入如下图界面: 5.直接点Next,进入下面的界面: 6.直接点Finish,jar文件包

Java的Class类及static块的执行时机

要理解RTTI在Java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工程由Class对象完成,它包含了与类有关的信息.Java使用Class对象来执行其RTTI,即使你执行的是类似转型这样的操作. Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建

浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当try和catch中有return时,finally仍然会执行: 3. finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的:

jvm内存模型,java类从编译到加载到执行的过程,jvm内存分配过程

一.jvm内存模型 JVM 内存模型主要分为堆.程序计数器.方法区.虚拟机栈和本地方法栈 1.堆 1.1.堆是 JVM 内存中最大的一块内存空间. 1.2.该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中. 1.3.堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivor 和 To Survivor 组成. 2.程序计数器(Program Counter Register) 程序计数器是一块很小的内存