浅谈windows下,shutdown.bat无法关闭tomcat服务器
来源:互联网 发布:抢购秒杀软件 编辑:程序博客网 时间:2024/05/21 07:15
原因一:代码逻辑问题
解决方案:
如果出现该博客描述的问题,首先查看代码是否开了线程,而忘记回收资源,其次在看看使用的框架是否使用了连接池、线程池之类的东东,有就在恰当的时候,回收。当然,每个人都觉得自己的代码,无懈可击,完全没有必要修改,所有该方法并不适用所有人。
原因二:线程堵塞,或JDBC
解决方案:
如果出现线程堵塞,tomcat日志中会很明显的抛出严重警告,遇到这种问题,而归根结底造成这种情况,说白了也就是,原因“一”的后遗症,因为你某个地方开启了线程,或者打开连接池,然而在shutdown的时候,该批处理文件,并没关闭java后台线程,造成关闭不了tomcat的现象。
基于这种BUG:假设你使用了Servlet,那么设置监听器,显得尤其重要。什么!监听是什么?请读者自行搜索。
代码如下:
使用要点:
若是你使用的JDBC驱动,并注册了驱动,那么你需要destroySpecifyThreads
若是你开了线程,而你不知道该在哪里销毁它,那么你只需在该变量MANUAL_DESTROY_THREAD_IDENTIFIERS 中COPY日志中的未关闭,或造成堵塞线程的名字就OK了。
/* * 监听器:程序退出,关闭所有线程 */public class ServletIndexListener implements ServletContextListener{ public static final List<String> MANUAL_DESTROY_THREAD_IDENTIFIERS = Arrays.asList("Abandoned connection cleanup thread", "pool-1-thread-1" , "AdminTaskTimer" , "HelperThread-#0" , "HelperThread-#1" , "HelperThread-#2" , "pool-1-thread-2"); @Override public void contextDestroyed(ServletContextEvent arg0) { destroyJDBCDrivers(); //销毁JDBC destroySpecifyThreads(); //销毁Thread } //开启tomcat前执行线程 @Override public void contextInitialized(ServletContextEvent arg0) { } //销毁指定线程 @SuppressWarnings("deprecation") private void destroySpecifyThreads() { final Set<Thread> threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (needManualDestroy(thread)) { synchronized (this) { try { thread.stop(); // System.out.println("线程销毁 成功!"); } catch (Exception e) { } } } } } //输入线程关键字 private boolean needManualDestroy(Thread thread) { final String threadName = thread.getName(); for (String manualDestroyThreadIdentifier : MANUAL_DESTROY_THREAD_IDENTIFIERS) { if (threadName.contains(manualDestroyThreadIdentifier)) { return true; } } return false; } //这里是反注册驱动 private void destroyJDBCDrivers() { final Enumeration<Driver> drivers = DriverManager.getDrivers(); Driver driver; while (drivers.hasMoreElements()) { driver = drivers.nextElement(); try { DriverManager.deregisterDriver(driver); } catch (SQLException e) { } } }}
重点内容
终极办法:
咳咳,当读者看到这里的时候,说明前面笔者说的都是废话,完成没有用!
那么,现在笔者就教给大家一个符合暴力美学的方法。这种方法,杀人不见血!慎用!
该办法,就是安装tomcat/bin目录下的service.bat文件,让tomcat服务器变成计算机服务,在DOS下输入命令行开启和关闭,这办法很强势,像打家劫舍的土匪,管你有的没的,一股脑就给你关闭了。
当然,这种方案很多前辈都说过了,笔者只是站在巨人们的肩膀上而已……
最后,具体怎么安装,请读者自行搜索!
- 浅谈windows下,shutdown.bat无法关闭tomcat服务器
- linux下shutdown无法关闭tomcat进程的解决方案
- linux下shutdown无法关闭tomcat进程的解决方案
- linux下shutdown无法关闭tomcat进程的解决方案
- shutdown后tomcat进程无法关闭
- Linux下使用shutdown.sh脚本关闭tomcat无法使得JVM关闭
- 利用shutdown.bat关闭Tomcat,发现进程关闭了,但是TOmcat启动窗口没关闭
- linux 环境下使用shutdown.sh命令无法关闭tomcat 进程
- 关于tomcat7下shutdown无法正常关闭服务的解决方案
- TOMCAT下shutdown不能完全关闭的解决方法
- Tomcat无法shutdown进程
- Tomcat无法通过shutdown.sh重启服务器解决办法
- Windows下关闭Tomcat进程
- linux 下无法shutdown.sh Tomcat的解决办法
- tomcat startup.bat和shutdown.bat闪退问题
- tomcat学习(一)startup.bat 与shutdown.bat
- Tomcat学习笔记 startup.bat 与shutdown.bat
- Tomcat——startup.bat 与shutdown.bat
- Lua_运算符_004
- 第4篇 关联式容器(associative)
- 从老板的裤裆拉链看 Google 管理之道
- Quaternion 四元数
- 容器在 Weave 中如何通信和隔离?- 每天5分钟玩转 Docker 容器技术(65)
- 浅谈windows下,shutdown.bat无法关闭tomcat服务器
- 二维RMQ求矩阵最值学习、
- 据说年薪30万的Android程序员必须知道的帖子
- QT
- Openpilot GCS Linux系统下开发环境安装
- 利用jdbc对数据表进行分页,操作存储过程(有参与无参,返回游标),函数等
- 大数据预科班1,2
- 对I/O阻塞、非阻塞;同步I/O、异步I/O的理解
- .tar.bz2文件的解压命令