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

Spring MVC从4.1.x迁6.2.0+JDK1.8转21遇启动异常求助

问题分析与解决方案

错误核心原因

你遇到的AbstractMethodError本质是类版本不兼容:

  • Spring Framework 6.x基于Jakarta EE 9+规范,org.springframework.web.WebApplicationInitializer的onStartup方法参数已从javax.servlet.ServletContext升级为jakarta.servlet.ServletContext。
  • 错误栈中的org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer属于Spring Boot自动配置模块,但你的依赖树中存在旧版本的spring-boot-autoconfigure——这个旧版本的类仍实现的是基于javax.servlet的onStartup方法,无法匹配Jakarta版本的接口要求,因此抛出抽象方法未实现错误。

添加spring-boot-autoconfigure依赖后问题解决,是因为你用兼容Spring 6.2.0的Spring Boot版本(Spring Boot 3.2.x对应Spring Framework 6.2.x)替换了依赖树中旧的、不兼容的版本,让该类实现了正确的Jakarta版本方法。

为什么会需要引入Spring Boot依赖?

你的项目并非必须依赖Spring Boot,问题出在两个点:

  1. 传递依赖引入了不兼容模块:你当前使用的依赖(比如Spring Integration、Spring Data等)可能间接引入了旧版本的spring-boot-autoconfigure,而你未显式指定兼容版本,导致冲突。
  2. 触发了Spring Boot自动配置逻辑:如果你的classpath下存在application.properties/yml等Spring Boot配置文件,或代码中使用了@EnableAutoConfiguration等注解,会自动触发Spring Boot的自动配置类加载,进而加载到这个不兼容的JerseyWebApplicationInitializer类。

具体解决建议

1. 排查并修复传递依赖

执行Maven命令查看依赖树,定位旧版本spring-boot-autoconfigure的来源:

mvn dependency:tree | grep spring-boot-autoconfigure

找到后,在对应依赖中排除旧版本,同时显式添加兼容版本(比如Spring Boot 3.2.0):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>3.2.0</version>
</dependency>

2. 若无需Spring Boot,彻底移除相关逻辑

如果你的项目不是Spring Boot项目,直接在传递依赖中排除spring-boot-autoconfigure,同时清理触发自动配置的因素:

  • 删除classpath下的application.properties/yml文件
  • 移除代码中的@EnableAutoConfiguration、@SpringBootApplication等Spring Boot专属注解

3. 升级其他不兼容依赖

你的依赖中还有多个版本过旧,会导致JDK21和Spring 6.x的兼容性问题:

  • Jackson:将jackson-core-asl、jackson-mapper-asl替换为Jackson 2.x系列(比如2.15.3),Spring 6.x要求Jackson 2.15+支持。
  • 日志组件:移除冲突的日志绑定,统一使用Log4j2稳定版本:
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.23.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.23.1</version>
    </dependency>
    
    同时移除slf4j-log4j12、log4j 1.2.16。
  • 连接池:将c3p0升级到0.9.5.5,或替换为Spring推荐的HikariCP。
  • 工具类:将commons-lang 2.6替换为commons-lang3 3.14.0,commons-lang2已停止维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:41:10