ZBLOG

tomcat 启动报错23-May-2023 14:54:00.965 WARNING [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [blacklist] appears to have started a thread named [Druid-ConnectionPool-Create-7659847...

这个错误提示是因为Tomcat检测到您的web应用程序启动了线程,但是该线程没有被正确地关闭。这可能会导致内存泄漏。

从错误信息中可以看出,问题来自于Druid连接池。Druid是一个流行的JDBC连接池实现,在Java开发中经常使用。

解决这个问题的方法通常有两种:

  1. 在web应用程序停止时手动关闭连接池:您可以在ServletContextListener接口的实现类中,监听web应用程序的启动和关闭事件,并在web应用程序停止时手动关闭Druid连接池。示例代码如下:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class DruidListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // web应用程序初始化时,不需要做任何事情
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // web应用程序停止时,手动关闭Druid连接池
        DruidDataSource druidDataSource = (DruidDataSource) SpringContextHolder.getBean("dataSource");
        if (druidDataSource != null) {
            druidDataSource.close();
        }
    }
}
  1. 使用Tomcat提供的资源管理器:Tomcat提供了一个叫做JNDIRealm的资源管理器,它支持JNDI(Java命名和目录接口)规范,并且能够确保在web应用程序停止时正确地释放资源。您可以在context.xml中配置该资源管理器,示例代码如下:
<Context>
    <Resource name="jdbc/myDataSource" auth="Container"
              type="javax.sql.DataSource" username="root" password="password"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/mydb"
              maxActive="20" maxIdle="10"/>
    <Realm className="org.apache.catalina.realm.JNDIRealm"
           connectionURL="ldap://myserver:10389/o=JNDITesting"
           alternateURL="ldap://mybackupserver:10389/o=JNDITesting"
           userPattern="(uid={0})"/>
</Context>

以上两种方法都能够解决这个问题,但是使用Tomcat提供的资源管理器可能会更方便一些,并且能够确保资源正确释放。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=2884

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?