`

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上百实例源码以及开源项目源代码

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    Java开发技术大全(500个源代码).

    showSomething.java 测试运行时多态 stupid.java 试图覆盖最终方法的类,它有错误 Sub.java 一个简单的子类 Super.java 一个基类 testOverload.java 测试方法的重载示例1 testOverload_1.java 测试方法的重载...

    JAVA上百实例源码以及开源项目

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    完全免费的Java/jsp开发编辑工具FirstJava2

    你还将学会直接用javac命令来编译代码,java运行代码方法,ANT方式编译和运行代码, 创建自己的更高效的Build.xml文件,实现DIY自已的工程, Eclipse和Jbuild编译和运行代码方式,和这差不多,把他们隐藏起来了. 请...

    apache-tomcat-9.0.31-windows-x64.zip

    tomcat运行时所需要的配置文件。 注意: server.xml (配置tomcat端口) connectionTimeout="20000" redirectPort="8443" /&gt; lib: 存放tomcat运行时所需要的jar文件。 logs: 存放tomcat运行时所...

    FirstJava2完全教材

    你还将学会直接用javac命令来编译代码,java运行代码方法,ANT方式编译和运行代码, 创建自己的更高效的Build.xml文件,实现DIY自已的工程, Eclipse和Jbuild编译和运行代码方式,和这差不多,把他们隐藏起来了. 请输入...

    FirstJava2免费版3.0

    会有方便的辅助对话框,显示相关的函数和属性,jsp页面的有更好的编辑辅助对话框可以少输入很多代码,java代码的自动编译和运行,Tomcat工程的自动Build,自动部署和自动启动,加入文件的导航功能,实现了方便的文件切换,...

    Java/jsp编辑开发工具FirstJava2.2完整版

    包,类的创建和保存,java代码和jsp页面的编辑,会有方便的辅助对话框,显示相关的函数和属性,jsp页面的有更好的编辑辅助对话框可以少输入很多代码,java代码的自动编译和运行,Tomcat工程的自动Build,自动部署和自动启动,...

    xmljava系统源码-classfinal:Java类加密工具

    运行加密项目时,无需求修改tomcat,spring等源代码。 支持普通jar包、springboot jar包以及普通java web项目编译的war包。 支持spring framework、swagger等需要在启动过程中扫描注解或生成字节码的框架。 支持...

    APACHE 2.2.9+TOMCAT6.0.18配置负载均衡

    就OK了,以后开机后tomcat服务就自动启动了 注册服务: 首先,在开始-&gt;运行中敲cmd,进入MS-DOS界面 cd 到tomcat的bin目录下 运行命令service install TomcatA 就可以把tomcat注册成系统服务了,服务的名称是TomcatA ...

    FirstJava2教材3.1

    包,类的创建和保存,java代码和jsp页面的编辑,会有方便的辅助对话框,显示相关的函数和属性,jsp页面的有更好的编辑辅助对话框可以少输入很多代码,java代码的自动编译和运行,Tomcat工程的自动Build,自动部署和自动启动....

    FirstJava2免费版3.5

    java代码的自动编译和运行,Tomcat工程的自动Build,自动部署和自动启动. FirstJava2主要特点:速度快,功能简单,管用,反应敏捷,编辑辅助方式比较高效.好用! 加入六个实用功能,可以大大减少开发工作量: 1.Hibernate配置...

    jsp中使用java资源注射

    这个过程是运行时自动完成的,不需要编写任何代码。 资源注射是通过注解(Annotation)完成的。注解是Java 5.0里引入的新特性。注解是一种特殊的接口,以“@”符号为标志。 JSP中如何使用资源注射呢? 其实很简单。

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    Java论坛系统巡云轻论坛采用JAVA+MYSQL架构,自适应手机端和电脑端,界面简洁,性能高效.rar

    巡云轻论坛系统包含论坛、问答模块。采用JAVA+MYSQL架构,自适应手机端...4.在Eclipse中打开src\test\java\forum\Init.java执行main方法,将SQL导入到数据库,然后重启Tomcat即可正常运行。管理员初始账号admin 密码1234

    Java论坛系统巡云轻论坛采用JAVA+MYSQL架构,自适应手机端和电脑端,界面简洁,性能高效 .rar

    巡云轻论坛系统包含论坛、问答模块。采用JAVA+MYSQL架构,自适应手机端...4.在Eclipse中打开src\test\java\forum\Init.java执行main方法,将SQL导入到数据库,然后重启Tomcat即可正常运行。管理员初始账号admin 密码1234

    基于JSP的BBS论坛的源代码

    3.启动MyEclipse,新建一个JavaProject,名称为SimpleBBS,这样MyEclipse会自动找到对应的SimpleBBS的文件夹,并且把其中的JAVA代码全都复制到Ch03工程中 4.在MyEclipse开发环境中,将sqljdbc.jar(SimpleBBS\WebRoot...

    mysql-connector-java-commercial-5.1.30-bin.jar

    在Windows XP下安装完MySQL后,它就已经自动启动服务了,并且在开始菜单中有其客户端的快捷方式连接 可以通过Windows的服务管理器查看。“开始”-“运行”,输入“services.msc”,回车。 弹出Windows的服务管理...

    Java面试宝典2020修订版V1.0.1.doc

    2、java为什么能够跨平台运行? 13 3、String是基本数据类型吗?我可不可以写个类继承于String? 14 4、谈谈&和&&的区别? 14 5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么? 14 6、...

Global site tag (gtag.js) - Google Analytics