087、案例七:遗留 Java 项目的 Spring Boot 现代化升级

📅 2026/6/29 3:52:54
087、案例七:遗留 Java 项目的 Spring Boot 现代化升级
087、案例七:遗留 Java 项目的 Spring Boot 现代化升级从一次诡异的“ClassNotFoundException”说起上周五下午,我正盯着一个跑了快十年的老项目——一个基于Spring 3.2 + XML配置的电商后台。客户要求把它升级到Spring Boot 2.7,说是要上容器化。我心想,不就是加个@SpringBootApplication嘛,结果一启动,控制台直接给我甩了个ClassNotFoundException: org.springframework.web.context.ContextLoaderListener。当时我第一反应是:依赖冲突了。但仔细一看,pom.xml里根本没有显式引入spring-web,老项目是靠父POM传递依赖的。这种“隐式依赖”在Spring Boot的starter机制下直接翻车——Boot默认用嵌入式Tomcat,但老项目的web.xml里还挂着ContextLoaderListener,而那个类在spring-web的旧版本里路径已经变了。别笑,这种坑我踩了不止一次。遗留项目升级最怕的不是代码逻辑复杂,而是“你以为它没用的东西,其实在某个角落等着炸你”。第一步:先别急着改代码,把依赖理清楚我习惯的做法是:先跑一遍mvn dependency:tree,把整个依赖树dump出来。然后对照Spring Boot 2.7的BOM(B