添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

解决方法:

进入tomcat目录下查找配置文件,conf > Context.xml,查找Context标签,修改属性reloadble为 reloadable=“false” (如果没有reloadable属性,就自己创建一个)

WEB-INF/web.xml WEB-INF/tomcat-web.xml ${catalina.base}/conf/web.xml

reloadable的功能:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用 ,也就是热部署。 有助于调试servlet和其它的class文件,但这样用加重服务器运行负荷,建议在Web应用的发存阶段将reloadable设为false。

后续问题:

如果reloadable变为false后依然有一个报错:

意思是注册过jdbc驱动,在容器关闭时没有注销,并且是在AbandonedConnectionCleanupThread线程中。 所以为了内存避免泄露,就强制注销了驱动。

解决方法:

写一个容器监听器,在容器销毁时注销AbandonedConnectionCleanupThread。

网上的查找到的监听器代码是基于旧版驱动的,我修改了一个新版本的,记得在配置中添加对应的包扫描

import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
@WebListener
public class MyContextListener implements ServletContextListener {
    //注销驱动,防止服务器重新部署时jdbc报错
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        Enumeration drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            try {
                DriverManager.deregisterDriver(drivers.nextElement());
            } catch (SQLException e) {
                e.printStackTrace();
        // 关闭AbandonedConnectionCleanupThread线程
        AbandonedConnectionCleanupThread.checkedShutdown();
        System.out.println("注销驱动、关闭AbandonedConnectionCleanupThread线程");

本公司主要经营服务器托管,服务器租用,IDC机房托管租用,数据中心租赁,电信联通移动BGP多线带宽租用租赁,GPU服务器托管,超算机房租用,机房高电机柜租用,带宽传输,互联网接入,多种云计算增值服务,可一站式提供AI人工智能,金融证券银行,游戏视频电商等各种解决方案,欢迎咨询!