【问题标题】:Spring Boot REST Deployment: do we need TomCat?Spring Boot REST 部署:我们需要 TomCat 吗?
【发布时间】:2019-05-21 18:49:13
【问题描述】:

我见过 Spring Boot Rest 项目生成 WAR,然后部署在 tomcat 容器中。我想知道这是否是最佳实践,因为我在 Spring Boot 中也读到过,新的最终可执行 JAR 文件也包含像 Tomcat 这样的嵌入式服务器解决方案?

现在我看到了一篇相关的帖子,其中谈到 Spring Boot 支持这两种方式,但没有人讨论每种方式的优缺点。

有人可以指出部署 Spring Boot Rest 项目的最佳实践吗?

我正在考虑对包含嵌入式服务器的 JAR 进行 docker 化,但我想知道与将 WAR 部署到 Tomcat 相比是否有任何缺点?

【问题讨论】:

    标签: spring maven spring-boot jar spring-rest


    【解决方案1】:

    关于应用程序环境和依赖项的一般最佳实践(来自12 Factor App)是“显式声明和隔离依赖项”。

    十二因素应用从不依赖于系统范围内的隐式存在 包

    考虑到这一点,人们应该更倾向于使用嵌入式容器作为显式依赖的一部分,而不是需要单独满足的要求。jar 工件中的嵌入式容器有多种选择(如 tomcat、jetty、undertow、 netty),它们各自的配置也很丰富,所以建议在生产环境中使用它们(我用过很多)。但是,在某些时候您可能想要创建一个战争,例如,战争文件将可部署在您的环境可能要求的任何成熟的 EE 应用程序服务器(Weblogic、Wildfly 等)中。随着战争,您在应用服务器方面的选择数量会增加。就我个人而言,带有嵌入式 tomcat 的 spring boot jar 非常有效。使用嵌入式容器选项,您需要一台安装了 OS 和 Java 的虚拟机,一切顺利。

    但是,正如 Spring Boot 文档中提到的 here 中提到的,有一个与 JSP 相关的特殊限制,这解释了为什么您可能需要打包为 war 但仍以 jar 运行的一个很好的理由。

    【讨论】:

    • 我正在考虑对 jar 进行 docker 化,但与使用 tomcat 相比有什么优缺点?
    • 再次,您可以在映像中使用 tomcat 进行 dockerize,而无需使用 tomcat 也可以仅使用带有嵌入式 tomcat 的 jar。这只是创建图像时要做的另一件事。如果您已经在使用带有来自容器注册表的 java 映像的 tomcat,那么您可能需要将一些特定的 tomcat 配置文件从您的项目复制到该映像。显然,使用 docker,您将能够为您的应用程序创建一个完整的可移植环境。
    猜你喜欢
    • 2016-11-04
    • 2020-06-18
    • 1970-01-01
    • 2017-11-23
    • 2016-03-28
    • 2014-09-04
    • 2015-03-10
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多