具有不同嵌入式服务器的 Spring Boot WAR 大小

Posted

技术标签:

【中文标题】具有不同嵌入式服务器的 Spring Boot WAR 大小【英文标题】:Spring boot WAR size with different embedded servers 【发布时间】:2015-05-20 10:30:09 【问题描述】:

我正在用 spring-boot 做一些实验,我意识到当我使用嵌入式 Tomcat 服务器时,生成的 WAR 大小比我使用 Jetty 甚至具有相同其余依赖项的 Undertow 服务器时要小。

这怎么可能? ... 应该说 Undertow 和 Jetty 与 tomcat 相比应该是超轻量级的。

尺寸为:

Tomcat ~18Mb

Undertow ~21Mb

码头 ~24Mb

它们中的任何一个对我来说都太大了,因为这是虚拟的 REST 端点。 这些是我的依赖项:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- <dependency> -->
        <!-- <groupId>org.springframework.boot</groupId> -->
        <!-- <artifactId>spring-boot-starter-tomcat</artifactId> -->
        <!-- </dependency> -->
        <!-- <dependency> -->
        <!-- <groupId>org.springframework.boot</groupId> -->
        <!-- <artifactId>spring-boot-starter-undertow</artifactId> -->
        <!-- </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
<!--        <dependency> -->
<!--            <groupId>org.springframework.boot</groupId> -->
<!--            <artifactId>spring-boot-starter-test</artifactId> -->
<!--            <scope>test</scope> -->
<!--        </dependency> -->
    </dependencies>

【问题讨论】:

您是否尝试解压缩 .war 文件并查看 /lib 文件夹以查看额外重量的来源? 【参考方案1】:

Spring Boot 包括三个示例应用程序,spring-boot-sample-jettyspring-boot-sample-tomcatspring-boot-sample-undertow,具有最少且几乎相同的功能。使用 Spring Boot 1.2.2.RELEASE,档案大小为:

spring-boot-sample-jetty - 12MB spring-boot-sample-tomcat - 9.8MB spring-boot-sample-undertow - 9.6MB

如您所见,Tomcat 和 Undertow 几乎相同,而 Jetty 工件要大约 20%。

大小差异的一个显着原因是 JSP 支持。 Undertow 不支持 JSP,Spring Boot 默认不包含 Tomcat 的 JSP 支持。大约 1.7MB 的基于 Jetty 的存档被用于 JSP 编译的 Eclipse Java 编译器占用。如果您想使用 Jetty 并且不使用 JSP,则可以排除 org.eclipse.jetty:jetty-jsp 依赖项。这会将基于 Jetty 的工件的大小减少到 8.8MB。

【讨论】:

另外,当部署这些嵌入式应用服务器时,这如何增加应用大小?

以上是关于具有不同嵌入式服务器的 Spring Boot WAR 大小的主要内容,如果未能解决你的问题,请参考以下文章

具有嵌入式 init.d 脚本的 Spring Boot 应用程序未在重新启动时启动

在两个不同端口上具有两个服务的 Spring Boot 应用程序

带有嵌入式 Tomcat 的 Spring Boot 忽略了方法角色

Spring Security 具有不同用户详细信息的多个 HTTPSecurity 服务在 Spring Boot 中不起作用

如何在 Spring Boot 嵌入式 tomcat 中设置 HTTPS SSL 密码套件首选项

使用 spring boot 配置多个 servletcontainers/servlet