zoukankan      html  css  js  c++  java
  • tomcat中多线程web服务的关闭

    问题:

    将多线程web服务部署于tomcat中,该web服务中的子线程一直在运行(或时不时被触发运行),关闭tomcat后,该web服务没有被同时关掉(windows系统中表现为tomcat.exe进程已经关闭,java.exe进程依旧存在,并且在继续执行)

    解决方法:

    新建一个监听类,该类实现ServletContextListener接口中的contextInitiialized()方法和contextDestroyed()方法。然后在tomcat中注册该监听类,开启或关闭tomcat时,都将先执行该监听类

    1、举例:新建监听类CgmIndexListener

    package com.saas.cgm;

    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    //若使用ServletContextListener接口,可能需添加javax.servlet-5.1.12.jar或其它库
    public class CgmIndexListener implements ServletContextListener{
    private static ExecutorService exec = Executors.newCachedThreadPool();//线程池
    //关闭tomcat前关闭线程
    public void contextDestroyed(ServletContextEvent arg0) {
    exec.shutdownNow();;
    }
    //开启tomcat前执行线程
    public contextInitiialized(ServletContextEvent arg0) {
    RamIndexWriter ramIndexWriter = new RamIndexWriter();//新建一个线程
    exec.execute(ramIndexWriter);
    }

    2、注册该监听类:在tomcat安装目录下的conf文件夹内的web.xml文件中添加:

        <listener>
    <listener-class>com.saas.cgm.CgmIndexListener</listener-class>
    </listener>

    添加完如下所示:

        <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
      <!--在此之后添加-->
    <listener>
    <listener-class>com.saas.cgm.CgmIndexListener</listener-class>
    </listener>

    3、此时,关闭tomcat时,tomcat首先关闭线程池exec中的ramIndexWriter 线程,当没有子线程在运行时,java.exe进程也就能被顺利关闭了



    推荐一个自己业余时间开发的网盘搜索引擎,360盘搜www.360panso.com



  • 相关阅读:
    一些浏览器的兼容和雪碧图的使用
    常用的一些样式
    Open.auth 开源项目学习(一)SSO单点登录
    一个开发人员对于职业生涯规划的感想
    从今天开始分享自己的学习经历
    mysql在海量数据时的处理方案
    Mysql分区
    su和sudo的区别
    su:authentication failure问题
    大数据处理思路
  • 原文地址:https://www.cnblogs.com/eczhou/p/2418201.html
Copyright © 2011-2022 走看看