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

Spring Boot从1.3.x升级至1.5.9遇ServletRegistrationBean类找不到异常

解决Spring Boot 1.5.9升级后的IllegalStateException依赖定位问题

从你的描述来看,虽然你自己的代码没用到ServletRegistrationBean,但问题肯定出在依赖的构件(尤其是你提到的内部构件)上——它们大概率引入了和Spring Boot 1.5.9不兼容的类或者旧版依赖,导致运行时初始化冲突。下面是几个实用的排查步骤:

  • 先拿到完整的异常栈信息
    你只贴了异常开头,这远远不够。一定要把完整的java.lang.IllegalStateException栈打出来,重点看Caused by部分,这里会明确告诉你是哪个类、哪个方法触发的问题,比如是不是某个内部依赖里的代码试图实例化ServletRegistrationBean,或者和Servlet上下文初始化相关的逻辑出了问题。

  • 用Maven依赖树揪出冲突
    执行这个命令生成完整的依赖树:

    mvn dependency:tree -Dverbose
    

    搜索ServletRegistrationBean相关的条目,看看哪个构件把它带进来了,同时检查这个构件依赖的Spring Boot版本是不是和1.5.9兼容。另外,重点核对Spring Cloud组件的版本——Edgware确实是兼容1.5.x的,但Brixton太老了,建议直接锁定Edgware的稳定版(比如Edgware.SR5)。

  • 逐个排除可疑依赖试错
    根据依赖树的结果,尝试给可疑的内部构件添加排除规则,比如如果某个内部构件依赖了旧版的spring-boot-starter-web,就把它排除掉:

    <dependency>
        <groupId>你的内部构件groupId</groupId>
        <artifactId>你的内部构件artifactId</artifactId>
        <version>对应版本</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    每次排除后启动项目,看异常是否消失,这样逐步缩小范围,就能找到搞事情的那个构件。

  • 开调试日志抓细节
    在application.properties里加上这两行,开启Spring的调试日志:

    logging.level.org.springframework=DEBUG
    logging.level.org.springframework.boot=DEBUG
    

    启动后重点看Servlet上下文初始化、Bean创建阶段的日志,异常发生前后的日志会告诉你哪个Bean初始化失败,以及这个Bean依赖的类来自哪个Jar包,这对定位依赖问题非常关键。

  • 检查自动配置类的兼容性
    Spring Boot 1.5.x的自动配置逻辑和1.3.x有不少变化,有些内部构件可能自定义了自动配置类,这些类在新版本下可能不兼容。你可以用--debug参数启动项目,控制台会输出所有生效的自动配置类,以及哪些类被排除,从中找找有没有异常的配置逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:25