在Tomcat / Jetty上部署的Spring启动应用程序与.war文件

时间:2016-11-16 20:21:29

标签: java tomcat spring-boot jetty

在我的例子中,让我们考虑使用Spring Boot创建和配置的简单RESTful服务。该服务与数据库(例如Postgres)通信。

有什么区别:

  • 构建Spring Boot .jar文件并通过java -jar myservice.jar在我的远程公共主机上运行它?

  • 将其打包到.war文件并将其部署在Tomcat / Jetty上?

第一个选项似乎要容易得多,你只需要运行一个.jar。在第二个选项中,您需要创建Tomcat实例,运行它然后部署.war文件。 还有其他区别吗?这两种方法的优点和缺点是什么?

2 个答案:

答案 0 :(得分:17)

  

将其打包到.war文件并将其部署在Tomcat / Jetty上?

如果可能的话,不要这样做。 原因:使用嵌入式tomcat(或任何其他服务器运行时,如下载,网络,码头等),构建微服务架构要容易得多。

正如Josh Long曾在他的一次春季IO会谈中所说的那样“make Jar, not War”

另一方面,如果你有一个带有servlet容器的现有基础设施,并且已经有多个application.wars在这些servlet容器中运行,你所要做的就是将你的应用程序打包为war文件和hand它是一个发布团队(或者说你只是被重用现有的基础设施),然后它就是一个不同的故事......但是,技术世界已经摆脱了这种做法。

同样,本着微服务的精神,本着春天启动的精神,我鼓励你使用嵌入式服务器并制作可运行的jar文件,而不是采用传统的部署。

修改

如果您要将应用程序停靠,那么您有两个选项可以将tomcat打包到最终的工件中#34; (通过"最终的神器",我的意思是泊坞镜图像,而不是jar。罐子只是一个中间工件)。

  1. 使用嵌入式tomcat,以便将tomcat打包到jar中并使用JVM docker镜像
  2. OR

    1. 从jar中排除tomcat,然后打包应用程序并使用tomcat Docker镜像。
    2. 不过,任何一天,我都会选择第一个选项,因为这样可以让开发过程变得更加容易(而且不言而喻,加入新开发人员会更容易)。

答案 1 :(得分:1)

product page所述,这些jar包含servlet容器,将直接启动它。

  

直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)

如果你计划在一台主机上运行你的应用程序而没有其他东西(docker?),这可能是一个很好的可能性 - 如果你的主机包含其他应用程序,部署战争的方法会更有趣,因为你可以拥有这些servlet容器只在主机上一次。