将Spring Boot 2.0与Tomcat 7.0.82配合使用

问题描述 投票:3回答:1

我有一个使用Spring Boot 2.0.0.RC2的项目。我需要使用Tomcat 7.0.82的传统部署将其部署到客户环境。通过以典型的方式为Spring应用程序(使用DispatcherServlet)配置web.xml而不是使用SpringBootServletInitializer,我设法构建了可以成功部署的战争。

我还想通过简单地使用@SpringBootApplication注释在应用程序类中运行main方法,使用嵌入式Tomcat容器快速启动应用程序在本地环境中。如果我使用默认的Tomcat版本(8.5.28),它可以正常工作。但是,我想在7.0.82版本中启动嵌入式容器。这对我来说很重要,原因是另一个原因 - 我正在使用SpringBootTest,如果这些测试运行在与客户环境完全相同的容器上,那就太好了。不幸的是,我无法使用Spring Boot父POM并覆盖tomcat.version属性。

我已经尝试过@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 embedded-tomcat-7
1个回答
0
投票

Spring boot 2:Tomcat支持的最低版本是8.5

参考:https://dzone.com/articles/spring-boot-20-new-features-infrastructure-changes

© www.soinside.com 2019 - 2024. All rights reserved.