Boot 4 升级后 spring-boot-starter-undertow 报 version is missing 怎么办?server.undertow 配置还生不生效?换成 Jetty 要改什么?硬加 Boot 3.5 的 starter 会怎样?这篇在 Spring Boot 4.0.8 上逐个启动。
Boot 3.5.16:解析成功,Undertow 版本 2.3.24.Final Boot 4.0.8:解析失败,Maven 报 'dependencies.dependency.version' for org.springframework.boot:spring-boot-starter-undertow:jar is missing(BOM 里没有这个坐标的版本)
3.5.16 能解析,4.0.8 报 version is missing。
server.tomcat.*:3.5.16 有 53 个,4.0.8 有 54 个 server.jetty.*:3.5.16 有 27 个,4.0.8 有 27 个 server.undertow.*:3.5.16 有 25 个,4.0.8 有 0 个
server.undertow.* 从 25 个变成 0 个。
启动成功,WebServer 实现类 org.springframework.boot.tomcat.TomcatWebServer 日志:INFO o.s.b.tomcat.TomcatWebServer - Tomcat started on port <端口> (http) with context path '/' -- 3.5.16 默认 starter-web 启动成功,WebServer 实现类 org.springframework.boot.web.embedded.tomcat.TomcatWebServer 日志:INFO o.s.b.w.e.t.TomcatWebServer - Tomcat started on port <端口> (http) with context path '/' -- 3.5.16 starter-web 去掉 Tomcat 加 starter-undertow 启动成功,WebServer 实现类 org.springframework.boot.web.embedded.undertow.UndertowServletWebServer 日志:INFO o.s.b.w.e.u.UndertowWebServer - Undertow started on port <端口> (http) with context path '/'
4.0.8 的 Tomcat 实现类换了包,3.5.16 里换 Undertow 能启动。
启动成功,WebServer 实现类 org.springframework.boot.jetty.servlet.JettyServletWebServer 日志:INFO o.s.boot.jetty.JettyWebServer - Jetty started on port <端口> (http/1.1) with context path '/'
去掉 Tomcat、加 starter-jetty 即可启动。
启动成功,WebServer 实现类 org.springframework.boot.tomcat.TomcatWebServer 日志:INFO o.s.b.tomcat.TomcatWebServer - Tomcat started on port <端口> (http) with context path '/'
Tomcat 还在时悄悄继续跑 Tomcat。
启动失败 ApplicationContextException ← 根因 MissingWebServerFactoryBeanException:No qualifying bean of type 'org.springframework.boot.web.server.servlet.ServletWebServerFactory' available: Unable to start AnnotationConfigServletWebServerApplicationContext due to missing ServletWebServerFactory bean
MissingWebServerFactoryBeanException。