Spring boot 将Spring Boot 2.0与Tomcat 7.0.82配合使用
我有一个使用SpringBoot2.0.0.RC2的项目。我需要使用Tomcat 7.0.82的传统部署将其部署到客户环境。 我已经成功地构建了一个war,它可以通过为Spring应用程序(使用DispatcherServlet)配置Spring boot 将Spring Boot 2.0与Tomcat 7.0.82配合使用,spring-boot,embedded-tomcat-7,Spring Boot,Embedded Tomcat 7,我有一个使用SpringBoot2.0.0.RC2的项目。我需要使用Tomcat 7.0.82的传统部署将其部署到客户环境。 我已经成功地构建了一个war,它可以通过为Spring应用程序(使用DispatcherServlet)配置web.xml来成功部署,而不是使用SpringBootServletilizer 我还希望有一种在本地环境中使用嵌入式Tomcat容器快速启动应用程序的方法,只需在带有@SpringBootApplication注释的应用程序类中运行main方法。如果我使用默认的
web.xml
来成功部署,而不是使用SpringBootServletilizer
我还希望有一种在本地环境中使用嵌入式Tomcat容器快速启动应用程序的方法,只需在带有@SpringBootApplication
注释的应用程序类中运行main方法。如果我使用默认的Tomcat版本(8.5.28),它可以正常工作。但是,我也希望在7.0.82版本中启动嵌入式容器。这对我来说很重要,还有另一个原因——我正在使用SpringBootTest,如果这些测试运行在与客户环境完全相同的容器上,那就太好了。不幸的是,我不能使用Spring Boot父POM和overridetomcat.version
属性
我已经尝试了@springbootplication(exclude=ServletWebServerFactoryAutoConfiguration.class)
createTomcatServletWebServerFactory
bean手动
@Bean
public ServletWebServerFactory tomcatServletWebServerFactory() {
return new TomcatServletWebServerFactory();
}
并在pom.xml
中显式添加tomcat 7.0.82依赖项(${tomcat.version}=7.0.82):
org.springframework.boot
弹簧启动机tomcat
假如
org.apache.tomcat
tomcat注释api
org.apache.tomcat.embed
tomcat嵌入式内核
org.apache.tomcat.embed
tomcat嵌入式el
org.apache.tomcat.embed
tomcat嵌入websocket
org.apache.tomcat
tomcat注释api
${tomcat.version}
org.apache.tomcat
tomcat util
${tomcat.version}
org.apache.tomcat.embed
tomcat嵌入式内核
${tomcat.version}
org.apache.tomcat.embed
tomcat嵌入式el
${tomcat.version}
org.apache.tomcat.embed
tomcat嵌入websocket
${tomcat.version}
但是我仍然得到一个java.lang.NoClassDefFoundError:org/apache/tomcat/util/scan/StandardJarScanFilter
错误
您能告诉我是否有办法满足我的要求吗?Spring boot 2:
Tomcat的最低支持版本是8.5
参考:将弹簧护套降级至1.5分支。SpringBoot2.0需要一个Servlet3.1容器。Tomcat 7是一个Servlet 3.0容器。如果可能的话,我希望避免使用它-我更愿意为Spring Boot 2.0找到一个解决方案,因为我希望支持JUnit5。Spring Boot 2需要Spring 5,它需要Servlet 3.1容器。您唯一的选择是降级,如果这仅适用于JUnit5,那么Spring4.3也支持JUnit5。看见或者升级到Tomcat 8.5(官方的3.1容器)。@M.Deinum-我将版本降级为1.5.10.RELEASE,现在我在7.0.82版本中有了嵌入式容器。但有趣的是,我研究了SpringBoot1.5.10.RELEASE在3.1.0版本中使用ServletAPI的依赖版本。你知道为什么它适用于1.5.10.RELEASE而不适用于2.0.0.RC2吗?因为它不是Servlet 3.0 API所需的最低版本。你能分享一下对官方文档的引用吗?这是GitHub上的官方Spring Boot发行说明:上面的链接不能被视为官方资源。
<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>