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. layer iframe加载单个图片或者加载页面

    加载单个图片 layer.open({ type: , title: false, closeBtn: , area: '150px', skin: 'layui-layer-nobg', //没有背 ...

  2. Android 四大组件学习之ContentProvider三

    上节课学习怎样自己创建一个ContentProvider.以及用ContentResolver去操作ContentProvider. 今天我们用系统提供的ContentProvider. 先来个简单的 ...

  3. 为什么网络银行不支持GNU/Linux操作系统下的浏览器操作

    当年Linux没出时.银行就開始信息化建设了. 所为信息化,就是指用计算机工作了.服务客户了. 顺带着,慢慢的建server,连网(内部网).外网(网上银行) 这样下来, unix, dos, win ...

  4. jQuery取得循环列表的第一列值

    有例如以下的表格: <table class="list_tab" id="personalDetail"> <tr class=" ...

  5. MySQL List分区(三)

    具体介绍请看   MySQL分区一 样例:该样例为本人个人学习总结分享

  6. bzoj1924: [Sdoi2010]所驼门王的宝藏

    陈年老题又来水一发啊啊啊 构图狗了一点,然后其实强连通缩点dij找最长路就没了. 没调出来有点气,直接打了第9个点的表.... 来逛blog的你教教我呗 #include<cstdio> ...

  7. 使用dbms_metadata.get_ddl遇到ORA-31603

    建了一个外部表,想看看这个表的信息,一查就报错了: SQL> select dbms_metadata.get_ddl('TABLE','ext_case1') from dual; ERROR ...

  8. ios 中生成随机数

    ios 有如下三种随机数方法: 1.    srand((unsigned)time(0));  //不加这句每次产生的随机数不变        int i = rand() % 5; 2.    s ...

  9. BZOJ 2287 DP+容斥

    思路: 先处理出来f[j]表示这i个物品都可用 填满容量j的方案数 容斥一发 处理出来g[j]=g[j-w[i]] 表示i不能用的时候 填满容量j的方案数 //By SiriusRen #includ ...

  10. 源码编译Oprofile

    上菜了翠花:首先编译Oprofile需要三个源码:binutils.popt与oprofile Linux版(由于是在64位的linux系统编译-----敬请参考“在64位linux上编译32位程序” ...