`

java web项目定时器 简单实现

阅读更多

<div class="iteye-blog-content-contain" style="font-size: 14px">

我使用jdk 自带的 timer 类来实现。

主要的业务代码

  1. package com.sxl;  
  2.   
  3. import java.util.TimerTask;  
  4.   
  5. import javax.servlet.ServletContext;  
  6.   
  7. /** 
  8.  * 定时器  
  9.  * @author sxl 
  10.  * 
  11.  */  
  12. public class DelFileTask extends TimerTask{  
  13.   
  14.     private static boolean isRunning = false;    
  15.     
  16.     private ServletContext context = null;    
  17.     
  18.     public DelFileTask() {  
  19.         super();  
  20.     }  
  21.       
  22.     public DelFileTask(ServletContext context) {    
  23.         this.context = context;    
  24.     }    
  25.     @Override  
  26.     public void run() {  
  27.           
  28.         if (!isRunning) {  
  29.                
  30.             context.log("开始执行指定任务");   
  31.             /** 
  32.              * 自己的业务代码 
  33.              */  
  34.               
  35.             isRunning = false;    
  36.             context.log("指定任务执行结束");  
  37.         } else {    
  38.             context.log("上一次任务执行还未结束");    
  39.      }  
  40.     }  
  41.   
  42. }  

这个类 主要是继承 TimerTask并实现它的run 方法

下面就是监听类了 监听服务器的启动并将任务添加到任务栈

  1. package com.sxl;  
  2.   
  3. import java.util.Calendar;  
  4. import java.util.Date;  
  5.   
  6. import javax.servlet.ServletContextEvent;  
  7. import javax.servlet.ServletContextListener;  
  8.   
  9. public class ContextListener implements ServletContextListener{  
  10.   
  11.     public ContextListener() {  
  12.     }  
  13.       
  14.      private java.util.Timer timer = null;    
  15.        
  16.     /** 
  17.      * 初始化定时器 
  18.      * web 程序运行时候自动加载   
  19.      */  
  20.     @Override  
  21.     public void contextInitialized(ServletContextEvent arg0) {  
  22.           
  23.          /**  
  24.          * 设置一个定时器  
  25.          */    
  26.         timer = new java.util.Timer(true);    
  27.             
  28.         arg0.getServletContext().log("定时器已启动");   
  29.     
  30.         /**  
  31.          * 定时器到指定的时间时,执行某个操作(如某个类,或方法)  
  32.          */    
  33.   
  34.           
  35.         //设置执行时间  
  36.         Calendar calendar =Calendar.getInstance();  
  37.         int year = calendar.get(Calendar.YEAR);  
  38.         int month = calendar.get(Calendar.MONTH);  
  39.         int day =calendar.get(Calendar.DAY_OF_MONTH);//每天  
  40.         //定制每天的1:00:00执行,  
  41.         calendar.set(year, month, day, 010000);  
  42.         Date date = calendar.getTime();  
  43. //        System.out.println(date);  
  44.           
  45.         int period = 24 * 60 * 60 * 1000;  
  46.         //每天的date时刻执行task,每隔persion 时间重复执行  
  47.         timer.schedule(new DelFileTask(arg0.getServletContext()), date, period);  
  48. //        在 指定的date时刻执行task, 仅执行一次  
  49. //        timer.schedule(new DelFileTask(arg0.getServletContext()), date);  
  50.           
  51.           
  52.         arg0.getServletContext().log("已经添加任务调度表");    
  53.           
  54.     }  
  55.   
  56.     /** 
  57.      * 销毁 
  58.      */  
  59.     @Override  
  60.     public void contextDestroyed(ServletContextEvent arg0){  
  61.   
  62.         timer.cancel();  
  63.         arg0.getServletContext().log("定时器销毁");  
  64.     }  
  65. }  

这个类 主要是设置一个调度器 并让他 按一定的要求去执行任务。

 

任务类 监听器类 都实现了 下一步就是在web.xml 配置监听器了 

  1. <listener>  
  2.         <listener-class>com.sxl.ContextListener</listener-class>    
  3. </listener>    

到了这里   一个简单的定时器基本上实现了 也能跑通了   接下来 需要做的 就是根据自己项目的实际要求 去丰富定时器类 DelFileTask  和启动定时器的ContextListener 。

java.util.Timer 类的 schedule方法说明
 

schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。 (只执行一次)

 

参数:
task - 所要安排的任务。
delay - 执行任务前的延迟时间,单位是毫秒。
抛出:
IllegalArgumentException - 如果 delay 是负数,或者 delay + System.currentTimeMillis() 是负数。
IllegalStateException - 如果已经安排或取消了任务,或者已经取消计时器。

schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。 (只执行一次)

 

参数:
task - 所要安排的任务。
time - 执行任务的时间。
抛出:
IllegalArgumentException - 如果 time.getTime() 是负数。
IllegalStateException - 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
schedule(TimerTask task,long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。

在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定Object.wait(long) 所依靠的系统时钟是准确的)。

固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。

 

参数:
task - 所要安排的任务。
delay - 执行任务前的延迟时间,单位是毫秒。
period - 执行各后续任务之间的时间间隔,单位是毫秒。
抛出:
IllegalArgumentException - 如果delay 是负数,或者 delay + System.currentTimeMillis() 是负数。
IllegalStateException - 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。

 

 

schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。

在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。在长期运行中,执行的频率一般要稍慢于指定周期的倒数(假定Object.wait(long) 所依靠的系统时钟是准确的)。

固定延迟执行适用于那些需要“平稳”运行的重复执行活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。

 

参数:
task - 所要安排的任务。
firstTime - 首次执行任务的时间。
period - 执行各后续任务之间的时间间隔,单位是毫秒。
抛出:
IllegalArgumentException - 如果time.getTime() 是负数。
IllegalStateException - 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。
参考文章 :http://blog.csdn.NET/xiaojin21cen/article/details/7725565

</div>

 

分享到:
评论

相关推荐

    java web定时器例子

    Java Web定时器主要指的是在Java Web应用程序中实现定时任务的功能,这在许多业务场景中都是必要的,例如数据备份、报表生成、邮件发送等。在Java中,我们可以利用内置的`java.util.Timer`类或者Spring框架的`@...

    web定时器的实现思路

    综上所述,实现Web定时器的方式多样,可以根据项目需求和环境选择最适合的方法。在Java环境中,可以选择Quartz、Spring Task或者内置的`ScheduledExecutorService`,而在Web前端,JavaScript的定时器是常见的选择。...

    quartz通过cron实现web项目定时器

    Quartz是一款强大的、开源的作业调度框架,常用于Java应用程序中,包括Web项目,来实现定时任务的执行。本文将详细介绍如何使用Quartz结合cron表达式在Web项目中创建一个定时器。 首先,理解Quartz的基本概念至关...

    java定时器结合spring

    Java定时器结合Spring框架可以创建灵活且可扩展的定时任务,这种技术在许多企业级应用中非常常见,用于执行周期性的后台任务,如数据清理、报告生成或服务调用等。下面将详细介绍如何在Spring中集成Java定时器,并...

    Java_Web定时器使用

    ### Java Web定时器使用详解 #### 一、Java定时器简介 Java定时器(`java.util.Timer`)是Java标准库中的一个实用工具类,它主要用于执行周期性的或一次性计划任务。通过设置定时器的间隔时间,可以在指定的时间...

    Java-Web定时器使用.doc

    Java Web定时器是一种在Web应用程序中定期执行特定任务的机制,它主要依赖于Java的`java.util.Timer`类和`java.util.TimerTask`类。在Java Web开发中,定时任务通常用于后台数据处理、定时备份、日志清理等场景。...

    java 定时器 spring 定时器

    总结一下,Java定时器虽然简单易用,但在复杂应用中可能显得不足。Spring定时器通过提供丰富的配置选项和强大的`TaskScheduler`接口,成为企业级应用中定时任务的首选。使用Spring定时器,开发者能够更高效地管理和...

    javaweb 定时器的几种方式

    javaweb的几种定时方式,有助于了解定时的工作原理。对于定时器不了解的朋友可以看看

    java定时器的实现

    ### Java定时器的实现 #### 一、概述 在Java编程中,定时执行特定任务是一种常见的需求。...通过以上分析可以看出,Java定时器的实现相对简单且易于理解,但在实际项目中还需要根据具体情况灵活选择合适的技术方案。

    web定时器组件

    在本文中,我们将深入探讨Web定时器组件的概念、实现方式以及在Java中的应用。 一、Web定时器组件的重要性 1. 自动化任务:定时器组件可以自动化执行重复性或计划性的任务,减轻开发人员手动操作的负担。 2. 提高...

    java_Timer定时器实例_Spring实例

    标题与描述均提到了“Java_Timer定时器实例_Spring实例”,这表明文章主要讨论的是如何在Java中使用Timer类创建定时任务,并将其整合到Spring框架中。以下是对该主题的详细解析: ### Java中的Timer定时器 #### ...

    JAVA中定时器的使用

    JAVA 中提供了多种方式来实现定时器,包括使用 Timer 和 TimerTask 类,使用 ScheduledExecutorService 等。 在 JAVA 中,Timer 和 TimerTask 是两个基本的类,用于实现定时器。Timer 类用于创建一个新的定时器,而...

    JAVA WEB程序中添加定时器

    JAVA WEB程序中添加定时器是指在JAVA WEB程序中实现定时执行某些任务的功能。定时器可以根据需要执行特定的任务,例如数据备份、发送邮件、清理缓存等。在JAVA WEB程序中添加定时器可以使用Java的Timer和TimerTask类...

    java web定时器

    ### Java Web 定时器详解 #### 一、引言 在Java Web开发中,定时器(Timer)是一个非常实用的功能模块,它可以帮助开发者实现定时任务处理,例如定期执行...希望本文能够帮助到正在学习Java Web定时器技术的读者。

    javaweb 定时器工程

    总的来说,理解并熟练掌握这两种定时器的使用,对于开发高质量的Java Web应用程序至关重要。它们为开发者提供了强大的工具,能够在适当的时间自动执行必要的操作,从而提高系统的自动化程度和效率。在实际开发过程中...

    Java定时器

    ### Java定时器:掌握时间的艺术 #### 一、引言 在软件开发中,定时执行特定任务是一...无论是桌面应用、服务器端程序还是Web应用,Java定时器都能提供稳定的定时执行能力,是每个Java开发者应该掌握的重要技能之一。

    spring和java定时器

    在提供的Java代码片段中,`SPListener`实现了`ServletContextListener`接口,这意味着它会在Web应用启动时初始化,并在Web应用停止时销毁。在这个监听器中,创建了一个`Timer`实例,计划在每天特定时间(15:16:00)...

    java web 定时器

    javaweb定时器,需要tomcat6,部署后启动tomcat,访问index.jsp页面,定时器工作,kill Tomcat服务结束工作,本人用的Sql2000数据库,可以自行更改。完整工程源代码。

    java 写的定时器

    Java定时器是Java编程语言中实现任务调度的重要工具,它允许开发者在指定的时间间隔执行特定的任务,从而实现自动化的工作流程。在Java中,有两种主要的定时器类:`java.util.Timer` 和 `java.util.concurrent....

    java Timer定时器实例 Spring实例.doc

    【Java Timer定时器】 在Java中,`java.util.Timer` 类是用于调度任务的类,它可以在特定的时间点或者按照设定的周期执行某项任务。`Timer` 类提供了两种计划任务的方法:`schedule(TimerTask task, long delay)` ...

Global site tag (gtag.js) - Google Analytics