Spring Boot 2.0 WAR包能否部署至Tomcat 8.0.x?需升级至8.5吗?
Great question—let’s unpack this clearly, since the line between embedded vs. external container requirements can be easy to mix up.
First, let’s set the baseline: Spring Boot 2.0 ships with an embedded Tomcat 8.5 by default, which aligns with its move to support the Servlet 4.0 specification. But when you deploy your app as a WAR to an external Tomcat instance, the rules shift a bit.
Is Tomcat 8.5 mandatory for WAR deployment?
No, it’s not strictly mandatory—but there’s a big caveat here. Spring Boot 2.0 requires a Servlet container that supports Servlet 3.1 or higher. Tomcat 8.0.x does support Servlet 3.1, so in theory, you could get your WAR to run on it. However:
- Official support ends at Tomcat 8.5+: The Spring Boot 2.0 documentation explicitly lists Tomcat 8.5, Jetty 9.4, and Undertow 1.4 as the minimum supported containers. This means the Spring team doesn’t test against Tomcat 8.0.x, so you might hit unexpected compatibility issues (e.g., with certain auto-configuration features, HTTP/2 support, or container-specific behavior).
- Tomcat 8.0.x is end-of-life: Tomcat 8.0 reached its end of life in 2018, meaning no more security patches or bug fixes. Running an unmaintained container is a major security risk for any production application—this is the biggest reason to avoid it.
If you must try Tomcat 8.0.x (not recommended)
If you’re in a bind and need to test with Tomcat 8.0.x, here’s what you’ll need to do:
- Exclude the embedded Tomcat dependencies from your Spring Boot project to avoid classpath conflicts. For Maven, that would look like:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> - Add the
javax.servlet-apidependency with scopeprovidedto ensure your app uses the container’s Servlet implementation. - Thoroughly test all your application’s features—pay special attention to any parts that rely on container-specific behavior (like file uploads, security filters, or async processing).
Final Recommendation
While Tomcat 8.0.x might technically run your Spring Boot 2.0 WAR, it’s not a good idea for production (or even non-production) use. Stick to Tomcat 8.5 or higher to get official support, security updates, and full compatibility with Spring Boot’s features.
内容的提问来源于stack exchange,提问作者Martin Försterling

