`

Tomcat java 定时任务

阅读更多

如何在Web工程中实现任务计划调度  
   
          下面就Servlet侦听器结合Java定时器来讲述整个实现过程。要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent   event)和contextDestroyed(ServletContextEvent   event)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。  
          我把ServletContextListener的实现类取名为ContextListener,在其内添加一个定时器,示例代码如下所示(为考虑篇幅,仅提供部分代码供读者参考):  
   
   
   
   
  1.         private   java.util.Timer   timer   =   null;    
  2.         public   void   contextInitialized(ServletContextEvent   event)   {    
  3.                 timer   =   new   java.util.Timer(true);    
  4.                 event.getServletContext().log("定时器已启动");                    
  5.                   timer.schedule(new   MyTask(event.getServletContext()),   0,   60*60*1000);    
  6.                 event.getServletContext().log("已经添加任务调度表");    
  7.         }    
  8.         public   void   contextDestroyed(ServletContextEvent   event)   {    
  9.                 timer.cancel();    
  10.                 event.getServletContext().log("定时器销毁");    
  11.         }    
   
          以上代码中,   timer.schedule(new   MyTask(event.getServletContext()),   0,   60*60*1000)这一行为定时器调度语句,其中MyTask是自定义需要被调度的执行任务(在我的财政数据中心项目中就是报表计算引擎入口),从java.util.TimerTask继承,下面会重点讲述,第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟。其它代码相当简单,不再详细说明。  
        下面介绍MyTask的实现,上面的代码中看到了在构造MyTask时,传入了javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入,因此需要重载MyTask的构造函数(其父类java.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实现调度任务每24小时被执行一次,还需要判断一下时钟点,以常量C_SCHEDULE_HOUR表示(晚上12点,也即0点)。同时为防止24小时执行下来,任务还未执行完(当然,一般任务是没有这么长的),避免第二次又被调度以引起执行冲突,设置了当前是否正在执行的状态标志isRunning。示例代码如下所示:  
  1.         private   static   final   int   C_SCHEDULE_HOUR       =   0;    
  2.         private   static   boolean   isRunning   =   false;    
  3.                   private   ServletContext   context   =   null;    
  4.         public   MyTask(ServletContext   context)   {    
  5.                 this.context   =   context;    
  6.         }    
  7.         public   void   run()   {    
  8.                 Calendar   cal   =   Calendar.getInstance();                    
  9.                 if   (!isRunning)     {                          
  10.                         if   (C_SCHEDULE_HOUR   ==   cal.get(Calendar.HOUR_OF_DAY))   {                            
  11.                                         isRunning   =   true;                                    
  12.                                 context.log("开始执行指定任务");    
  13.                                    
  14.                                 //TODO   添加自定义的详细任务,以下只是示例    
  15.                                 int   i   =   0;    
  16.                                 while   (i++   <   10)   {    
  17.                                         context.log("已完成任务的"   +   i   +   "/"   +   10);    
  18.                                 }    
  19.  
  20.                                 isRunning   =   false;    
  21.                                 context.log("指定任务执行结束");                                  
  22.                         }                            
  23.                 }   else   {    
  24.                         context.log("上一次任务执行还未结束");    
  25.                 }    
  26.         }    
   
          上面代码中“//TODO……”之下四行是真正被调度执行的演示代码(在我的财政数据中心项目中就是报表计算过程),您可以换成自己希望执行的语句。  
  到这儿,ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListener部署到您的Web工程中去,在您工程的web.xml配置文件中加入如下三行:  
          <listener>  
                  <listener-class>com.test.ContextListener</listener-class>  
          </listener>    
          当然,上面的com.test得换成您自己的包名了。保存web.xml文件后,把工程打包部署到Tomcat中即可。任务会在每晚12点至凌晨1点之间被执行,上面的代码会在Tomcat的日志文件中记录如下:  
  2003-12-05   0:21:39   开始执行指定任务  
  2003-12-05   0:21:39   已完成任务的1/10  
          ……  
  2003-12-05   0:21:39   已完成任务的10/10  
  2003-12-05   0:21:39   指定任务执行结束  

分享到:
评论

相关推荐

    Tomcat的定时任务(计时器)

    本文将深入探讨如何在Tomcat中实现定时任务,主要涉及的知识点包括Java的定时器(Timer)和Spring框架的TaskScheduler。 首先,让我们了解一下Java中的定时任务。在Java标准库中,有一个名为`java.util.Timer`的类...

    java 定时任务

    Java定时任务是软件开发中的一个重要组成部分,特别是在服务端应用程序中,常常需要在特定时间执行某些操作,例如数据备份、清理过期数据、发送通知等。SpringBoot框架为开发者提供了便捷的方式来实现这些定时任务,...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    4. **部署与测试**:项目部署在Tomcat服务器上,当服务器启动时,Quartz会自动加载数据库中的定时任务。通过监控日志或者定制的监控界面,可以观察到定时任务的执行情况,验证其是否按照预期工作。 5. **Spring的...

    tomcat自动定时重启

    1. **计划任务**:大多数操作系统(如Windows、Linux)都提供了内置的任务调度器,可以用来设置定时任务。在Windows中,我们可以使用“任务计划程序”创建一个新任务来执行重启Tomcat的操作;在Linux系统中,可以...

    java定时器定时调用任务

    在Servlet容器(如Tomcat)中,可以通过监听器(Listener)或者Servlet的初始化方法来创建和启动定时器,以实现在Web应用启动后自动开始执行定时任务。 此外,Java 5引入了`java.util.concurrent`包,其中的`...

    java 定时器任务timer 随tomcat启动而启动 同步启动

    我们通常写的timer都是用main方法写的定时器,但同样我们也需要根据服务器启动后定时器也启动的 定时执行任务。不过有个致命伤就是集群方面跟quartz不能比,此方法代码做参考不错,如果要用,那么这个方法在一台...

    tomcat 定时作业

    首先,我们要了解Tomcat中的定时任务通常通过Java的定时框架来实现,最常见的是Java的ScheduledExecutorService或者使用Spring框架的TaskScheduler。这两种方式都可以在Tomcat容器内创建定时任务。 1. **使用...

    定时任务工具tomcat+jenkins

    本文将详细介绍如何利用Apache Tomcat(一个广泛使用的Java应用服务器)与Jenkins(一个开源持续集成/持续部署工具)来创建定时任务,实现电脑自动重启以及Tomcat的开机自启动。 首先,我们需要理解Tomcat的开机自...

    analyData:这是一个java定时任务,定时调用mysql的存储过程

    Java定时任务通常使用`java.util.Timer`类、`java.util.concurrent.ScheduledExecutorService`或者Spring框架的`@Scheduled`注解来实现。在`analyData`项目中,可能是使用了Spring Boot框架,利用`@Scheduled`注解...

    Java版钉钉群定时发消息(读取本地txt)

    Java中可以使用内置的`java.util.Timer`和`java.util.TimerTask`类或者更先进的`ScheduledExecutorService`来创建定时任务。定时任务会定期检查TXT文件的内容,如果文件有更新,就提取新内容并构造钉钉消息。 本地...

    tomcat启动时定时循环执行内容(action)

    综上所述,"tomcat启动时定时循环执行内容(action)"涉及的是如何在Tomcat启动时通过Java原生或者Spring框架设置定时任务,实现服务器启动后的自动周期性执行。这样的功能在很多场景下都有实际的应用价值,如日志清理...

    tomcat定时重启方案

    【描述】:本文将详细介绍如何配置Tomcat进行定时重启,包括Tomcat绿色版的注册为系统服务、调整内存设置、创建批处理文件和设置系统计划任务。 【标签】:“Tomcat” 【正文】: Tomcat是一款广泛使用的开源Java...

    简易的定时重启tomcat方案

    这样,我们就设置了一个定时任务,按照指定时间自动执行restart.bat,从而实现Tomcat的定时重启。 值得注意的是,这种方法适用于小型项目或者测试环境,对于生产环境,我们可能需要更复杂和灵活的解决方案,如使用...

    quartz spring动态定时任务,可以直接在tomcat上面部署运行

    Quartz是一个开源的作业调度框架,而Spring框架则为Java应用程序提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,将两者结合,可以在Spring管理的bean中无缝集成定时任务。 Quartz的核心概念包括Job、...

    JAVA 基于SpringBoot+layui秒级定时任务管理

    在本文中,我们将深入探讨如何使用Java和Spring Boot框架构建一个基于秒级的定时任务管理系统,同时结合layui前端UI库来提升用户体验。Spring Boot以其快速启动、简化配置和丰富的生态系统,已经成为Java开发中的...

    定时重启tomcat

    轻松实现tomcat定时重启 首先修改jsp.bat中的两个路径,其中set JAVA_HOME后面是jdk路径,下面是tomcat路径;运行,执行注册。 然后修改tomcat.bat中的ping 127.0.0.1 -n 5(暂停时间) 最后将tomcat.bat添加的计划...

    java定时发送邮件

    Java定时发送邮件是一种常见的自动化任务,常常用于通知、提醒或者定期报告等场景。在这个实例中,我们将探讨如何使用Java编程语言结合电子邮件服务实现一个定时发送邮件的功能。这涉及到的主要知识点包括JavaMail ...

    ssm集成quartz完成定时任务

    6. **部署项目**:将项目打包成WAR文件,部署到Tomcat等Web服务器的WEB-INF目录下,启动服务器后,Quartz就会按照配置开始执行定时任务。 在给定的压缩包文件中,`META-INF`和`WEB-INF`是WAR文件的标准目录结构。`...

    定时启动tomcat应用服务器批处理脚本

    部署时,只需将脚本和相关的依赖文件(如Tomcat)复制到目标机器上,然后在该机器上创建相应的定时任务。 总结,定时启动Tomcat应用服务器批处理脚本是一种实用的运维工具,通过结合Windows的任务计划程序,我们...

Global site tag (gtag.js) - Google Analytics