idea停止tomcat服务器如何一次停止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了idea停止tomcat服务器如何一次停止相关的知识,希望对你有一定的参考价值。

参考技术A 解决的方法:
1、找出是哪个线程还未关闭,随后修改代码处理。
2、在SpringSchedule+Redisson构建分布式任务调度。
3、添加@PreDestroy注解进行优化,使项目在关闭的时候触发方法关闭Redisson对象。

Tomcat停止时如何停止执行线程?

【中文标题】Tomcat停止时如何停止执行线程?【英文标题】:How to stop an executor thread when Tomcat is stopped? 【发布时间】:2016-06-30 00:10:05 【问题描述】:

我通过创建固定数量的线程来使用执行器服务来进行 HTTP GET 数据检索。

executorService = ExecutorServiceFactory.getInstance().getExecutorService(Config.getInstance().getNumberOfThreads(), "ThreadExecutor_"+UIDFactory.getInstance().createSessionID());
executorService.execute(new Retrieve(data));

private class Retrieve implements Runnable
    private Vector<String> data;

    public WADORetrieve(Vector<String> data)           
            this.data = data;
    

    @Override
    public void run() 
        for(int i=0;i<data.length;i++)
            fetch(data[i]);
        
    
    

当 Tomcat 停止时,我们会收到此错误:

严重:Web 应用程序 [/viewer] 似乎已经启动了一个名为 [ThreadExecutor_5161616156] 的线程,但未能停止它。这很可能会造成内存泄漏。

这是一个真正的问题吗?如果没有这些服务错误,我该怎么做才能正确停止 tomcat。

【问题讨论】:

Servlet "has started a thread but failed to stop it" - memory leak in Tomcat的可能重复 【参考方案1】:

这是一个真正的问题。执行器池中的非守护线程不会自行消失,如果您不在执行器上调用关闭,则线程将保持活动状态并阻止 JVM 退出。

创建一个 ServletContextListener,在 contextDestroyed 上调用您的执行程序关闭。

或者,您可以让 ThreadFactory 守护线程返回线程,以便在最后一个非守护线程终止时退出。由于您正在进行数据检索,因此最好避免这种情况,因为它可能会使数据库资源处于未关闭状态。

【讨论】:

如何使用 contextDestroyed 方法停止 Web 应用程序中的所有守护线程。因为我遇到了我问过的问题 ***.com/questions/39166512/…

以上是关于idea停止tomcat服务器如何一次停止的主要内容,如果未能解决你的问题,请参考以下文章

Linux下Tomcat启动,停止命令

myeclipse如何停止当前的tomcat服务?

IDEA Run/Debug Configurations 中点击“+”号没有tomcat server选项

Tomcat停止时如何停止执行线程?

tomcat服务器启动后有停止了.........

Tomcat 介绍与使用