我有一个使用 Spring Boot 2.0.0.RC2 的项目。我需要使用 Tomcat 7.0.82 的传统部署将其部署到客户环境。
通过配置web.xml
,我设法构建了一个可以成功部署的 war 。以 Spring 应用程序的典型方式(使用 DispatcherServlet)而不是使用 SpringBootServletInitializer
.
我还想有一种使用嵌入式 Tomcat 容器在本地环境中启动应用程序的快速方法,只需使用 @SpringBootApplication
运行应用程序类中的 main 方法即可。注解。如果我使用默认的 Tomcat 版本(8.5.28),它工作正常。但是,我也想在 7.0.82 版本中启动嵌入式容器。这对我来说很重要还有另一个原因——我正在使用 SpringBootTest,如果这些测试在与客户环境完全相同的容器上运行,那就太好了。不幸的是,我不能使用 Spring Boot 父 POM 并覆盖 tomcat.version
属性(property)。
我试过@SpringBootApplication(exclude = ServletWebServerFactoryAutoConfiguration.class)
创建 TomcatServletWebServerFactory
手动bean
@Bean
public ServletWebServerFactory tomcatServletWebServerFactory() {
return new TomcatServletWebServerFactory();
}
并在
pom.xml
中显式添加 tomcat 7.0.82 依赖项(${tomcat.version} = 7.0.82):<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-util</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>${tomcat.version}</version>
</dependency>
但我仍然收到
java.lang.NoClassDefFoundError: org/apache/tomcat/util/scan/StandardJarScanFilter
错误。您能否告知是否有任何方法可以满足我的要求?
最佳答案
Spring Boot 2:
Tomcat 的最低支持版本为 8.5
引用:https://dzone.com/articles/spring-boot-20-new-features-infrastructure-changes
关于spring-boot - 将 Spring Boot 2.0 与 Tomcat 7.0.82 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49007157/