嵌入式 Tomcat 是部署到生产的好选择吗

Rui*_*Rui 8 java spring-mvc maven spring-boot embedded-tomcat-8

传统上,通过将生成的war部署到Tomcat的-webapps-目录,将Servlet Maven项目部署到Tomcat生产服务器。但是,Spring-Boot 作为一种实用的趋势,推荐jar超过war. 这种偏好对测试没有问题,但如果部署到生产中现有的 Tomcat 服务器,AFAIK,只接受战争。所以我的解决方案是:

  1. 生成通过修改的Maven的pom.xml对应的战争,即设定的值packaging元素作为war这样:<packaging>war</packaging>。但这显然是一个额外的步骤
  2. 在生产环境中将项目部署为一个运行的 Java 程序,其中嵌入了 Tomcat,这意味着生产环境中根本没有正常的 Tomcat 服务器。但是嵌入式 Tomcat 在生产中是否与普通 Tomcat 服务器一样稳定?
  3. 如果将 Spring MVC 项目(没有 Spring Boot!)部署到现有的 Tomcat 服务器,我尝试在测试阶段使用Tomcat Maven 插件,而不是使用 Eclipse 和 Tomcat 服务器配置,因为 Tomcat 服务器应该作为先决条件安装在本地.

问题:以上的解决方案好吗?或者还有其他更好的部署到生产的解决方案吗?如果是第三种方案,据我所知只有Tomcat7 Maven插件,如果我只想用Tomcat 8或Tomcat 9测试怎么办?我尝试使用主类来启动嵌入式Tomcat,但是处理依赖项非常困难

Ada*_*lík 1

我认为对于以 Docker 容器的形式为您管理副本的云环境来说是的。

如果您部署为 WAR,那么为了实现 HA,您应该运行多个应用程序服务器节点,因此不需要嵌入 tomcat。

最后,最重要的是您的环境现在的样子。使用嵌入式服务器,您会失去单独服务器实例的一些功能,但如果您计划使用 AWS 之类的东西来执行自动任务,那么它应该足够了。

总体来说,我觉得嵌入式应该还可以。你是对的,有一个术语

制作 JAR,而不是 WAR

但 WAR 的唯一缺点是,我认为使用 Spring Boot 你不能使用反应式编程。包装对于您的情况并不重要。这在云环境中很重要,因为您可以使用副本确保 HA,并且最好作为 Docker 容器。