You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级JDK/Tomcat/MySQL后Tomcat启动类加载失败求助

问题排查与解决方案

一、ClassNotFoundException 逐个处理

1. com.mysql.jdbc.Driver

MySQL Connector/J 8.0.x 已废弃com.mysql.jdbc.Driver,改用com.mysql.cj.jdbc.Driver,同时JDBC URL必须指定时区参数,否则会触发时区错误。

检查并更新context.xml中的数据源配置:

<Resource name="jdbc/YourDB"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="com.mysql.cj.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC"
          username="root"
          password="your_pwd"
          maxTotal="100"
          maxIdle="30"
          maxWaitMillis="10000"/>

确保mysql-connector-j-8.0.31.jar放在Tomcat/lib目录下(不要放在项目WEB-INF/lib,避免类加载冲突)。

2. javax.faces.webapp.FacesServlet

Tomcat 9默认不包含JSF实现,需手动添加依赖:

  • Maven项目添加以下依赖(scope设为provided,避免与Tomcat冲突):
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.3.14</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.3.14</version>
    <scope>provided</scope>
</dependency>
  • 非Maven项目,下载jsf-api.jar和jsf-impl.jar放入Tomcat/lib目录。

同时检查web.xml中的FacesServlet配置,确保类名无拼写错误:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

3. org.springframework.web.util.Log4jConfigListener

Spring 4.x+(兼容JDK8)中,Log4j 1.x已停止维护,建议切换到Log4j 2或SLF4J+Logback。若需保留Log4j 1.x:

  • 确保项目包含spring-web和log4j依赖,版本需兼容(比如Spring 4.3.30.RELEASE)。
  • 检查web.xml中的监听器配置,确认类路径存在对应jar包:
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

若升级到Log4j 2,替换监听器并添加依赖:

<listener>
    <listener-class>org.springframework.web.util.Log4j2ConfigListener</listener-class>
</listener>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.20.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.20.0</version>
</dependency>

二、线程内存泄漏警告

Tomcat 9的内存泄漏警告多因旧库未正确释放线程或类加载器冲突导致,处理方案:

  • 清理项目WEB-INF/lib中重复、过时的jar包(比如旧版JDBC驱动、Apache Commons Pool等)。
  • 确保所有依赖版本与Tomcat 9、JDK8兼容(如Spring≥4.3.x,Hibernate≥5.2.x)。
  • 在context.xml的数据源配置中添加资源回收参数:
<Resource ...
          removeAbandonedOnBorrow="true"
          removeAbandonedTimeout="60"
          logAbandoned="true"/>
  • 自定义线程池需实现ServletContextListener,在应用销毁时手动关闭线程资源。

三、额外检查项

  • 确认Tomcatconf/catalina.properties中common.loader配置包含所需jar包路径,避免类加载器无法找到类。
  • 删除Tomcatwork目录的旧编译缓存,避免类文件冲突。
  • Maven项目用mvn dependency:tree查看依赖树,排除冲突或过时的依赖。

内容的提问来源于stack exchange,提问作者rob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:52:59