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



  • 相关阅读:
    vue使用CDN全局安装百度地图
    vue cli3使用webpack4打包优化
    vue使用axios提交formdata格式的数据
    windows、linux使用查看、杀死进程
    分离vue文件,方便后期维护
    vue:使用element-ui制作动态表格
    《从0到1学习Flink》—— Data Sink 介绍
    《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门
    《从0到1学习Flink》—— Flink 配置文件详解
    《从0到1学习Flink》—— Flink Data transformation(转换)
  • 原文地址:https://www.cnblogs.com/eczhou/p/2418201.html
Copyright © 2011-2022 走看看