java - Spring Boot 应用程序与部署在 Tomcat/Jetty 上的 .war 文件

标签 java tomcat spring-boot jetty

<分区>

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

有什么区别:

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

  • 打包成.war文件部署到Tomcat/Jetty上?

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

最佳答案

Package it to .war file and deploy it on Tomcat/Jetty?

如果可能的话,

不要这样做。 原因:使用嵌入式 tomcat(或任何其他服务器运行时,如 undertow、netty、jetty 等),构建微服务架构要容易得多。

正如 Josh Long 在他的一次 Spring IO 演讲中所说的“make Jar, not War”

另一方面,如果你有一个带有 servlet 容器的现有基础设施,并且已经有多个 application.wars 在这些 servlet 容器中运行,你所要做的就是将你的应用程序打包为一个 war 文件并手动将其移交给发布团队(或者更确切地说,您被迫只重用现有的基础设施),那就是另一回事了……但是,技术界已经开始放弃这种做法。

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

编辑

如果您正在对您的应用程序进行 docker 化,您有 2 个选项可以将您的 tomcat 打包到您的“最终工件”中(“最终工件”,我指的是 docker 图像,而不是 jar。Jar 在这里只是一个中间工件)。

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

  1. 从您的 jar 中排除 tomcat,只打包您的应用程序并使用 tomcat Docker 镜像。

不过,无论哪一天,我都会选择第一个选项,因为这会使开发过程变得更加容易(不用说,新开发人员的入职会更容易)。

关于java - Spring Boot 应用程序与部署在 Tomcat/Jetty 上的 .war 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641589/

相关文章:

java - 如何比较两个 json 对象的字段并避免 json 数组中出现重复

java - 输入 : localhost:8080 or ip:8080 Centos7 vm 时 tomcat 启动但未显示在浏览器中

spring-boot - 运行 Spring Boot Scheduler 和 Apache Camel 时出现问题

java - org.gradle.initialization.DefaultSettings_Decorated 无法转换为 org.gradle.api.internal.project.ProjectInternal

Java/Android- 将 InputStream 转换为字符串

java - Java 转换是如何工作的?

Java EnumMap 参数混淆

java - 如何为tomcat webapps配置设置正确的windows路径

jsf - 我应该使用哪个 jsf-impl?

java - 监听器未收到 ApplicationPreparedEvent