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

ilo*_*tie 19 java tomcat jetty spring-boot

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

有什么区别:

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

要么

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

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

so-*_*ude 19

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

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

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

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

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

编辑

如果你将你的应用程序停靠在一起,你有2个选项可以将你的tomcat包装在你的"最终工件"中(通过"最终工件",我的意思是泊坞图像,而不是jar.罐子只是一个中间工件).

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

要么

  1. 从jar中排除tomcat,然后打包应用程序并使用tomcat Docker镜像.

不过,任何一天,我都会选择第一个选项,因为这样可以使开发过程变得更加容易(而且不言而喻,加入新开发人员会更容易).