`

Java实现tomcat启动时自动运行代码

阅读更多
方法1:tomcat 自动执行servlet

写一个servlet,在init()方法中写好想要执行的程序,程序如下:

eclipse新建一个web\Dynamic Web Project , name = myweb1 , 把tomcat中的 servlet-api.jar复制到lib中,新建一个类MyServlet.java, 继承 javax.servlet.HttpServlet,代码如下:
package org.cai;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
  
public class MyServlet extends HttpServlet {  
  
    @Override  
    public void init() throws ServletException {  
        // TODO Auto-generated method stub  
        super.init();  
        System.out.println("自动加载启动.");  
        System.out.println("自动加载启动.");  
        for(int i = 0; i < 10; i++){  
              
            System.out.println(i + "、 自动加载启动.");  
        }  
    }  
  
      
}  


同时,在web.xml配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  <display-name>myweb1</display-name>  
  <welcome-file-list>  
    <welcome-file>index.jsp</welcome-file>  
  </welcome-file-list>  
  <servlet>  
   <servlet-name>MyServlet</servlet-name>  
   <servlet-class>org.cai.MyServlet</servlet-class>  
   <strong><load-on-startup>0</load-on-startup></strong>  
  </servlet>  
  <servlet-mapping>  
   <servlet-name>MyServlet</servlet-name>  
   <url-pattern>/</url-pattern>  
  </servlet-mapping>  
</web-app>     


其中<load-on-startup>0</load-on-startup>即可实现tomcat启动时执行该servlet

load-on-startup的值必须为整数

当load-on-startup值为负整数或者未指定时,容器在该servlet被调用时加载

当其值为0和正整数时,容器启动时加载,值越小,优先级越高

使用虚拟路径部署到tomcat中:在 tomcat的 server.xml的 </Host>前加入:

<Context debug="0" docBase="F:/studyworkspace/myweb1/WebRoot" path="myweb1" reloadable="true">
     </Context>



docBase为 myweb1的webroot的路径 ,path为上下文
方法2:Servlet侦听器

要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent event)和contextDestroyed(ServletContextEvent event)两个接口函数。

listener类如下:
package org.cai;  
  
import javax.servlet.ServletContextEvent;  
import javax.servlet.ServletContextListener;  
  
public class MyListener implements ServletContextListener {  
  
    private java.util.Timer timer = null ;  
    public void contextDestroyed(ServletContextEvent event) {  
        // TODO Auto-generated method stub  
  
    }  
  
    public void contextInitialized(ServletContextEvent event) {  
  
        timer = new java.util.Timer(true) ;  
        event.getServletContext().log("定时器已启动。") ;  
        timer.schedule(new MyTask(event.getServletContext()), 0, 5000) ;  
        event.getServletContext().log("已经添加任务调度表。" ) ;  
          
    }  
  
}  

contextInitialized函数里的内容将被自动执行
最后在web.xml里面添加一个监听节点就行了
  <listener>
   <listener-class>org.cai.MyListener</listener-class>
  </listener>

完整web.xml如下
<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  <display-name>myweb2</display-name>  
  <welcome-file-list>  
    <welcome-file>index.jsp</welcome-file>  
  </welcome-file-list>  
  <listener>  
    <listener-class>org.cai.MyListener</listener-class>  
  </listener>  
</web-app>  


如果要执行定时任务,就在自动执行的代码里面使用 java.util.Timer以及创建一个继承java.util.TimerTask的类。示例:
package org.cai;  
  
import java.util.TimerTask;  
  
import javax.servlet.ServletContext;  
  
public class MyTask extends TimerTask {  
  
     private static boolean isRunning = false;   
     private ServletContext context = null;   
  
     public MyTask(ServletContext context){  
           
         this.context = context ;  
     }  
    @Override  
    public void run() {  
  
        if (! isRunning){  
            System.out.println("开始执行指定任务.") ;  
            //if (C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)) {  
                isRunning = true ;  
                context.log("开始执行指定任务.") ;  
                //TODO 添加自定义的详细任务,以下只是示例   
                int i = 0;   
                while (i++ < 10) {   
                    context.log("已完成任务的" + i + "/" + 10);   
                    //System.out.println("已完成任务的" + i + "/" + 1000) ;  
                }   
          
                isRunning = false;   
                context.log("指定任务执行结束");   
                System.out.println("指定任务执行结束") ;  
  
            //}  
        }else{  
              
            context.log("上一次任务执行还未结束");   
  
        }  
    }  
  
}  


以上两种方法部署到tomcat,运行tomcat\bin\startup.bat,即可看到效果,其中方法2中的日志写入到tomcat\logs\localhost.xxxx-xx-xx.log文件中。

方法3:如果要spring启动后立即执行指定的函数 

spring启动后立即执行指定的函数只需要在spring配置文件中增加一个init-method属性即可
<bean id="test" class="com.zhy.demo.test" init-method="start" />
分享到:
评论

相关推荐

    java启动tomcat

    在部分内容中,我们可以看到使用 Java 程序来监听 Tomcat 服务器的状态,并在 Tomcat 无响应时自动重启 Tomcat 的实现思路。 监听 Tomcat 服务器状态 在 Java 程序中,我们使用定时访问服务器端固定的 JSP 页面...

    tomcat启动时,在后台自动执行一线程

    要实现在Tomcat启动时自动执行的Servlet,我们需要在Servlet的`init()`方法中添加代码来创建一个后台线程。`init()`方法是Servlet生命周期中的初始化阶段,当Servlet被加载时,Tomcat会调用这个方法。我们可以在`...

    java调用命令行启动tomcat

    然而,在某些特定场景下,例如自动化部署或者集成测试过程中,我们需要通过程序代码(如Java)来调用命令行启动Tomcat。这种方式更加灵活,可以更好地融入自动化流程中。 #### 二、准备工作 在进行Java调用命令行...

    Tomcat启动时,自动访问本地servlet

    当我们希望在Tomcat启动时自动访问本地的Servlet或JSP,可以通过配置监听器(Listeners)来实现这一需求。监听器是Servlet容器中的一个组件,它可以监听特定的事件,比如Web应用的初始化、销毁等,并在这些事件发生...

    java tomcat 监控程序

    Java Tomcat监控程序是用于确保Web应用程序持续稳定运行的重要工具。在Java开发环境中,Tomcat是一个广泛使用的开源应用服务器,特别适用于运行Java Servlets和JavaServer Pages(JSP)。为了提高系统的可靠性和稳定...

    自动监控 Windows平台Tomcat运行监控并自动重启

    本话题聚焦于在Windows平台上对Tomcat的运行状况进行自动监控,并在出现异常时进行自动重启,以保障服务的连续性。下面将详细讨论这个主题。 首先,我们要理解Tomcat是什么。Tomcat是一款开源的Java Servlet容器,...

    内嵌式tomcat启动web工程

    内嵌式Tomcat是开发Java Web应用时常用的一种方式,它允许我们将Tomcat服务器与应用程序打包在一起,无需单独部署到外部服务器。这种方式尤其适合于快速开发、测试和演示,因为它简化了部署流程,并且便于自动化构建...

    tomcat 部署java项目 jar

    Tomcat是一个开源的轻量级应用服务器,主要用于运行Servlet和JSP(JavaServer Pages)应用。下面将详细阐述这个主题。 1. **Apache Tomcat** - Tomcat是Apache软件基金会的Jakarta项目下的一个核心项目,它是基于...

    检测Tomcat运行状态-自动重启

    - **安全性考虑**:在实现自动重启功能时,需要注意避免恶意重启等问题,确保系统的安全稳定运行。 通过以上知识点的学习,可以了解到如何通过Java程序实现对Tomcat服务器状态的自动检测与重启,这对于保障基于...

    java+tomcat环境

    【Java+Tomcat环境配置详解】 ...通过配置JDK和Tomcat,我们可以创建、编译Java代码,同时利用Tomcat部署和运行Web应用程序,如OpenCMS。这为开发者提供了一个基础的工作平台,便于进行相关项目的实践和学习。

    java project 在tomcat下调试插件

    当你启动这个Tomcat服务器实例时,Eclipse会自动使用插件提供的功能来启动Tomcat,并监听调试端口。在代码中设置断点,然后开始调试,当程序执行到断点处,Eclipse会暂停,此时你可以查看变量值、单步执行、或者修改...

    java+tomcat自动部署

    3. **版本管理与持续集成**:在实际开发中,通常会使用Git进行版本控制,并结合Jenkins、Travis CI等持续集成工具,每当代码提交到仓库时,自动化构建过程会生成新的WAR文件并推送到预设的Tomcat部署目录,实现无缝...

    java_tomcat安装包.rar

    1. **Java Development Kit (JDK)**:Java Tomcat需要JDK来编译和运行Java代码。确保已安装并配置了JDK,并且JRE_HOME环境变量指向JDK的安装位置。 2. **Servlet和JSP**:Tomcat的主要职责是处理Servlet和JSP请求。...

    Java内嵌式Tomcat-TomcatDemo

    1. **启动与配置**:在Java代码中,通过`org.apache.catalina.startup.Tomcat`类来初始化和启动Tomcat服务器。开发者可以设置端口号、上下文路径、Web应用的根目录等参数。 2. **Web应用目录结构**:标准的Web应用...

    timer随tomcat启动案例

    本案例“timer随tomcat启动案例”就是针对这种情况的一个实例,它利用了Java的定时器(Timer)类和Tomcat的生命周期管理来实现在Tomcat服务器启动时自动运行的任务。 首先,我们要理解`Timer`类是Java.util包下的一...

    tomcat6.0 修改启动内存设置 java jvm参数配置

    在部署和运行 Java Web 应用时,合理地配置应用服务器(如 Apache Tomcat)的内存是非常重要的。这不仅可以提升应用程序的性能,还能有效避免因内存不足而导致的应用崩溃或性能下降等问题。本文将详细介绍如何在 ...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    Java项目包 Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    Java项目的自动化构建、打包和部署是现代开发流程中的重要环节,极大地提高了开发效率...通过这种方式,Java项目可以实现从代码修改到生产环境部署的无缝自动化流程,降低手动操作出错的可能性,提升开发团队的生产力。

    bootstrap开启与关闭tomcat

    1. **初始化**: Bootstrap类是Tomcat启动的起点,它通过main方法开始执行。在main方法中,Bootstrap会加载服务器的全局配置文件,如`catalina.properties`,并创建`Catalina`实例,这是Tomcat的主要容器。 2. **...

Global site tag (gtag.js) - Google Analytics