package com.timer;

 import java.util.Calendar;
import java.util.Date;
import java.util.Timer; import javax.servlet.ServletContext; /**
* Created on 2013-8-13
* Title: J2EE程序_[定时任务管理器]_[公共类]
* Description: [定时器]
* Copyright: xuqb (c) 2013
* Company: xuqb工作室
*
* @developer xuqb[155282323@qq.com]
* @version 1.0
*/
public class TimerManager {
/**
* Description:[时间间隔,每天执行次数(每五秒执行一次)]
* Value:PERIOD_DAY
*/
private static final long PERIOD_DAY = 5 * 1000; /**
* Description:[构造方法]
* @constructor 方法.
*/
public TimerManager(ServletContext event) {
// --获取配置文件中的时间
String commitCount = "0:0"; String[] objtime = null;
// 拆分从配置文件预设的小时和分钟;若没有,则默认零时零分执行(24小时制)
if (commitCount != null && !"".equals(commitCount)) {
objtime = commitCount.split(":");
} else {
objtime = new String[2];
objtime[0] = "0"; // 零时(24小时制)
objtime[1] = "0"; // 零分(24小时制)
}
int beginHour = Integer.parseInt(objtime[0]); // 开始执行小时(24小时制)
int beginMimu = Integer.parseInt(objtime[1]); // 开始执行分钟(24小时制)
Calendar calendar = Calendar.getInstance();
/*** 定制每日某时:某分执行方法(24小时制) ***/
calendar.set(Calendar.HOUR_OF_DAY, beginHour); // 开始执行小时(24小时制)
calendar.set(Calendar.MINUTE, beginMimu); // 开始执行分钟(24小时制)
calendar.set(Calendar.SECOND, 0); // 开始执行秒(24小时制)
Date date = calendar.getTime(); // 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于 当前的时间
// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 0); // 0代表增加0天
}
Timer timer = new Timer();
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask(event);
// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task, date, PERIOD_DAY);
} /**
* Created on 2013-8-13
* Description: [增加或减少天数]
*
* @param date
* @param num
* @return
* @developer: xuqb[155282323@qq.com]
* @update: [日期YYYY-MM-DD][更改人姓名][E-mail]
*/
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
 package com.timer;

 import java.util.TimerTask;

 import javax.servlet.ServletContext;

 /**
* Created on 2013-8-13
* Title: JavaWeb程序_[定时任务管理器]_[引用类]
* Description: [配合定时器引入具体业务实现类]
* Copyright: xuqb (c) 2013
* Company: xuqb工作室
* @developer xuqb[155282323@qq.com]
* @version 1.0
*/
public class NFDFlightDataTimerTask extends TimerTask { private ServletContext context = null; public NFDFlightDataTimerTask(ServletContext context){
this.context = context;
} /**
* Created on 2013-8-13
* Description: [方法功能中文描述]
*
* @developer: xuqb[155282323@qq.com]
* @update: [日期YYYY-MM-DD][更改人姓名][E-mail]
*/
public void run() {
try { int num = (int)(1+Math.random()*(10-1+1));
System.out.println(num);
context.setAttribute("bull", num); System.out.println(context.getAttribute("bull"));
// 在这里写你要执行的内容
System.out.println("这里编辑您的业务方法");
} catch (Exception emz) {
System.out.println("解析信息发生异常");
emz.printStackTrace();
}
}
}
 package com.timer;

 import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; /**
* Created on 2013-8-13
* Title: JavaWeb程序_[模块名称]_[说明]
* Description: [描述该类概要功能介绍]
* Copyright: xuqb (c) 2013
* Company: xuqb工作室
*
* @developer xuqb[155282323@qq.com]
* @version 1.0
*/
public class NFDFlightDataTaskListener implements ServletContextListener { private ServletContext context = null; /**
* Created on 2013-8-13
* Description: [方法功能中文描述]
*
* @developer: xuqb[155282323@qq.com]
* @update: [日期YYYY-MM-DD][更改人姓名][E-mail]
*/
public void contextInitialized(ServletContextEvent event) {
this.context = event.getServletContext();
new TimerManager(context);
} /**
* Created on 2013-8-13
* Description: [方法功能中文描述]
*
* @developer: xuqb[155282323@qq.com]
* @update: [日期YYYY-MM-DD][更改人姓名][E-mail]
*/
public void contextDestroyed(ServletContextEvent event) {
}
}

web.xml 插入如下代码

    <!-- begin 定时任务管理器 -->
<listener>
<listener-class>com.timer.NFDFlightDataTaskListener</listener-class>
</listener>
<!-- end 定时任务管理器-->

web程序定时器的更多相关文章

  1. web程序的路径笔记

    "/"与”\“区别:”/“是unix系统区分文件层级的标志,因为当前web应用程序在服务器端大都使用基于unix系统开发的操作系统,所以web程序包括浏览器里url都遵以”/“来区 ...

  2. .NET WEB程序员需要掌握的技能

    本来这个是我给我们公司入职的新人做一个参考,由于 @张善友 老师在他的微信号转了我的这篇文章<<.Net WEB 程序员需要掌握的技能>>,很多人觉得比较有用,说是看了后知道一 ...

  3. 让你的web程序“动”起来。

    看到这里你可能会问,asp.net程序本身就是动态网站,还要如何动? 我这里所谓的动起来,是指动态加载,动态更新.好吧可能你又要问了动态网站本来就是动态加载,动态更新的.asp.net的程序依附于II ...

  4. (转)对《30个提高Web程序执行效率的好经验》的理解

    阅读了博客园发布的IT文章<30个提高Web程序执行效率的好经验>,这30条准则对我们web开发是非常有用的,不过大家可能对其中的一些准则是知其然而不知其所以然. 下面是我对这些准则的理解 ...

  5. Web程序的运行原理及流程(二)

    其实WEB服务器和WEB应用服务器这两个概念特别容易混淆  可以理解为装了不同软件(服务)的两台计算机(服务器)吧 先对两个概念做一个简单介绍 了解了基本的概念 我们再用两个典型的例子做一下比较(建立 ...

  6. Web程序的运行原理及流程(一)

    自己做Web程序的开发也有两年多了 从最开始跟风学框架  到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来  我当时第一次做WEB项目看 ...

  7. ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序

    基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...

  8. 全面解读python web 程序的9种部署方式

    转载自鲁塔弗的博客,本文地址http://lutaf.com/141.htm  python有很多web 开发框架,代码写完了,部署上线是个大事,通常来说,web应用一般是三层结构 web serve ...

  9. linux自动定时备份web程序和mysql数据库

    前些天受朋友说linux定时备份不知道怎么搞,叫帮忙处理一下.由于这段时间正闲着,所以也就欣然答应.由于朋友对linux不懂也希望我将操作的过程记录下来,也就是越详细越好.所以写得比较$%^& ...

随机推荐

  1. emacs使用本地emacs server模式打开远程文件

    使用emacs的用户都知道,一般要打开远程机器上的文件要使用TrampMode模式,调用方式例如以下: C-x C-f /remotehost:filename RET (or /method:use ...

  2. elcipse 编译cocos2d-x android

    http://blog.csdn.net/eyu8874521/article/details/22605695 最開始学习cocos2dx.大多数人可能是被复杂的环境配置过程搞死的,尤其是和Andr ...

  3. 8.QList QMap QVariant

    QList int main1(int argc, char *argv[]) { QApplication a(argc, argv); QList<,,}; mylist << ...

  4. 动态连通性问题:union-find算法

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  5. BZOJ 4710 容斥原理+dp

    //By SiriusRen #include <cstdio> using namespace std; int n,m,a[1005]; typedef long long ll; l ...

  6. BZOJ 3729 splay维护DFS序+博弈论

    思路: 这像是 阶梯Nim之类的东西 我们 直接把sg函数 设成mod(L+1)的 一棵子树 向下的奇数层上的石子xor起来 就是答案 有加点和改值的操作 就splay维护一下 //By Sirius ...

  7. 【转】SQL Server 2008 数据库同步的两种方式 (发布、订阅)

    上篇中说了通过SQL JOB的方式对数据库的同步,这一节作为上一节的延续介绍通过发布订阅的方式实现数据库之间的同步操作.发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的 ...

  8. struts2学习之基础笔记7

    第十二章 Struts 2的标记库 1 OGNL简介 Object-Grephic Navigtor Language 图对象导航语言 作用:图对象导航语言是Struts 2标记库中为其相应标记属性进 ...

  9. React实现单例组件

    问题背景 在工作中遇到了这样一个场景,写了个通用的弹窗组件,却在同一个页面中多次使用了该组件.当点击打开弹窗时,可想而知,一次性打开了多个弹窗,而业务需求只需要打开一个. 我个人在解决问题过程中的一些 ...

  10. 双向链表C++实现

    双向链表实现,通过C++实现 #ifndef LinkList_hpp #define LinkList_hpp typedef struct Node{ int data; Node* next; ...