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,问题出在两个点:
- 传递依赖引入了不兼容模块:你当前使用的依赖(比如Spring Integration、Spring Data等)可能间接引入了旧版本的
spring-boot-autoconfigure,而你未显式指定兼容版本,导致冲突。 - 触发了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
相关产品推荐
相关产品推荐

