spring-boot - 将 Spring Boot 2.0 与 Tomcat 7.0.82 一起使用

标签 spring-boot embedded-tomcat-7

我有一个使用 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/

相关文章:

grails - 当我运行grails run-app命令时,我停用了缓存,无法创建缓存

spring-boot - 找不到类 org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration]

java - Spring boot runnable jar 找不到通过 java.system.class.loader jvm 参数设置的类加载器

java - Spring Boot上传文件大小限制

embedded-tomcat-7 - "ArquillianServletRunner not found"嵌入 Tomcat 7

tomcat - 如何配置嵌入式tomcat监听80和8443端口?

spring-boot - 如何在使用 spring-boot 断路器(Hystrix)时将数据从业务方法传递到回退方法?

java - ServiceLoader 不适用于打包的 Spring Boot 应用程序

spring-boot - 在 jar 外的 html 中定位图像

Java+Maven+嵌入式Tomcat : Project refuses to recognize web page