Spring Boot应用程序的嵌入式HTTP服务器在哪里?

时间:2020-07-20 15:16:48

标签: java spring spring-boot

我听说Spring Boot应用程序包含一个嵌入式HTTP服务器。但是,在运行gradlew之后,我得到了一个war文件,我将其放入Tomecat的webapp目录中。显然,WAR文件不包含嵌入式HTTP服务器。那么我的build.gradle文件是否以某种方式配置为排除HTTP服务器?如果是这样,哪个选项是为此目的?

2 个答案:

答案 0 :(得分:0)

这取决于您如何管理Spring Boot项目。使用maven或gradle,通常在创建WAR spring boot项目时,将servlet容器依赖项标记为已提供(它将由将在其中部署WAR的servlet提供)。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

这意味着来自此依赖项的所有功能实现都不会打包在最终工件中,而是由将部署此工件的环境提供。 (例如,Tomcat服务器。)

另一方面,如果您未标记servlet依赖性,则它将与项目一起打包(作为嵌入式服务器,但背后隐藏着更多的魔力),该项目将创建独立的应用程序。请注意,带有嵌入式服务器的项目的包装也应更改为JAR。同样,这不适用于不使用servlet的Reactor项目。

答案 1 :(得分:0)

默认的Spring Boot应用程序(仅具有spring-boot-starter作为依赖项)默认情况下不包含嵌入式servlet。

但是,如果您有spring-boot-starter-web应用程序,则有一个嵌入式的tomcat servlet。

Here,您可以看到使用spring-boot-starter-web时都会导入的Gradle依赖项。您可以看到它包含以下代码行:

    api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat"))

这使我们进入了自动导入的spring-boot-starter-tomcat依赖关系。 [Here][2],我们看到以下内容:

api("org.apache.tomcat.embed:tomcat-embed-core") {
    exclude group: "org.apache.tomcat", module: "tomcat-annotations-api"
}

因此,您可以看到Spring Boot如何以及在何处包括嵌入式servlet依赖项。