1 package com.timer; 2 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.Timer; 6 7 import javax.servlet.ServletContext; 8 9 /** 10 * Created on 2013-8-13 11 * Title: J2EE程序_[定时任务管理器]_[公共类] 12 * Description: [定时器] 13 * Copyright: xuqb (c) 2013 14 * Company: xuqb工作室 15 * 16 * @developer xuqb[155282323@qq.com] 17 * @version 1.0 18 */ 19 public class TimerManager { 20 /** 21 * Description:[时间间隔,每天执行次数(每五秒执行一次)] 22 * Value:PERIOD_DAY 23 */ 24 private static final long PERIOD_DAY = 5 * 1000; 25 26 /** 27 * Description:[构造方法] 28 * @constructor 方法. 29 */ 30 public TimerManager(ServletContext event) { 31 // --获取配置文件中的时间 32 String commitCount = "0:0"; 33 34 String[] objtime = null; 35 // 拆分从配置文件预设的小时和分钟;若没有,则默认零时零分执行(24小时制) 36 if (commitCount != null && !"".equals(commitCount)) { 37 objtime = commitCount.split(":"); 38 } else { 39 objtime = new String[2]; 40 objtime[0] = "0"; // 零时(24小时制) 41 objtime[1] = "0"; // 零分(24小时制) 42 } 43 int beginHour = Integer.parseInt(objtime[0]); // 开始执行小时(24小时制) 44 int beginMimu = Integer.parseInt(objtime[1]); // 开始执行分钟(24小时制) 45 Calendar calendar = Calendar.getInstance(); 46 /*** 定制每日某时:某分执行方法(24小时制) ***/ 47 calendar.set(Calendar.HOUR_OF_DAY, beginHour); // 开始执行小时(24小时制) 48 calendar.set(Calendar.MINUTE, beginMimu); // 开始执行分钟(24小时制) 49 calendar.set(Calendar.SECOND, 0); // 开始执行秒(24小时制) 50 Date date = calendar.getTime(); // 第一次执行定时任务的时间 51 // 如果第一次执行定时任务的时间 小于 当前的时间 52 // 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。 53 if (date.before(new Date())) { 54 date = this.addDay(date, 0); // 0代表增加0天 55 } 56 Timer timer = new Timer(); 57 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask(event); 58 // 安排指定的任务在指定的时间开始进行重复的固定延迟执行。 59 timer.schedule(task, date, PERIOD_DAY); 60 } 61 62 /** 63 * Created on 2013-8-13 64 * Description: [增加或减少天数] 65 * 66 * @param date 67 * @param num 68 * @return 69 * @developer: xuqb[155282323@qq.com] 70 * @update: [日期YYYY-MM-DD][更改人姓名][E-mail] 71 */ 72 public Date addDay(Date date, int num) { 73 Calendar startDT = Calendar.getInstance(); 74 startDT.setTime(date); 75 startDT.add(Calendar.DAY_OF_MONTH, num); 76 return startDT.getTime(); 77 } 78 }
1 package com.timer; 2 3 import java.util.TimerTask; 4 5 import javax.servlet.ServletContext; 6 7 8 /** 9 * Created on 2013-8-13 10 * Title: JavaWeb程序_[定时任务管理器]_[引用类] 11 * Description: [配合定时器引入具体业务实现类] 12 * Copyright: xuqb (c) 2013 13 * Company: xuqb工作室 14 * @developer xuqb[155282323@qq.com] 15 * @version 1.0 16 */ 17 public class NFDFlightDataTimerTask extends TimerTask { 18 19 private ServletContext context = null; 20 21 public NFDFlightDataTimerTask(ServletContext context){ 22 this.context = context; 23 } 24 25 26 /** 27 * Created on 2013-8-13 28 * Description: [方法功能中文描述] 29 * 30 * @developer: xuqb[155282323@qq.com] 31 * @update: [日期YYYY-MM-DD][更改人姓名][E-mail] 32 */ 33 public void run() { 34 try { 35 36 int num = (int)(1+Math.random()*(10-1+1)); 37 System.out.println(num); 38 context.setAttribute("bull", num); 39 40 System.out.println(context.getAttribute("bull")); 41 // 在这里写你要执行的内容 42 System.out.println("这里编辑您的业务方法"); 43 } catch (Exception emz) { 44 System.out.println("解析信息发生异常"); 45 emz.printStackTrace(); 46 } 47 } 48 }
1 package com.timer; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.ServletContextEvent; 5 import javax.servlet.ServletContextListener; 6 7 /** 8 * Created on 2013-8-13 9 * Title: JavaWeb程序_[模块名称]_[说明] 10 * Description: [描述该类概要功能介绍] 11 * Copyright: xuqb (c) 2013 12 * Company: xuqb工作室 13 * 14 * @developer xuqb[155282323@qq.com] 15 * @version 1.0 16 */ 17 public class NFDFlightDataTaskListener implements ServletContextListener { 18 19 private ServletContext context = null; 20 21 /** 22 * Created on 2013-8-13 23 * Description: [方法功能中文描述] 24 * 25 * @developer: xuqb[155282323@qq.com] 26 * @update: [日期YYYY-MM-DD][更改人姓名][E-mail] 27 */ 28 public void contextInitialized(ServletContextEvent event) { 29 this.context = event.getServletContext(); 30 new TimerManager(context); 31 } 32 33 /** 34 * Created on 2013-8-13 35 * Description: [方法功能中文描述] 36 * 37 * @developer: xuqb[155282323@qq.com] 38 * @update: [日期YYYY-MM-DD][更改人姓名][E-mail] 39 */ 40 public void contextDestroyed(ServletContextEvent event) { 41 } 42 }
web.xml 插入如下代码
1 <!-- begin 定时任务管理器 --> 2 <listener> 3 <listener-class>com.timer.NFDFlightDataTaskListener</listener-class> 4 </listener> 5 <!-- end 定时任务管理器-->