Spring Boot 嵌入式容器或 war 文件位于用于生产的外部容器中

2022-09-01 19:11:22

在这两种情况下,我都能够完全配置spring boot,这里的问题是它们中哪一个更健壮并且更推荐,因为我在spring boot文档中没有找到在生产环境中部署它的推荐方法,我对使用嵌入式容器的担忧是:

  1. 如果我想将其设置为Windows或Linux服务,jar文件是最佳选择吗?
  2. 如果我使用jar文件,我将无法访问重新启动服务器。
  3. 也许将来我需要在同一容器中安装更多应用程序。
  4. 如果我重新启动机器,我必须再次执行java -jar。

一般的问题是,哪个最好使用jar文件并将其作为java -jarname执行.jar在生产中或将包装更改为war,按提供的方式设置tomcat并将生成的war设置为空tomcat。

我希望你能帮助我。

---编辑---

很多时候,答案是视情况而定的,这是针对普通的Web应用程序或REST Web服务。


答案 1

jar 打包非常适合生产环境,只有在确实需要时才应该回退到战争中 - 当您无法控制部署环境时,通常会出现这种情况(这在大型企业中经常发生)。

Spring Boot Reference 中有一章是关于将基于 Spring Boot 的应用程序设置为 Unix/Linux/Windows 服务:安装 Spring Boot 应用程序

关于您的问题:

也许将来我需要在同一容器中安装更多应用程序。

使用嵌入式容器,如果您需要在同一台计算机上运行更多应用程序,则应分别启动两个应用程序,每个应用程序在不同的端口上运行,并且有效地最终将运行两个容器 - 这很好,应用程序可以更好地相互隔离。


答案 2

大约一个月前,我遇到了像你这样的问题。让我分享我的结论:

1) 罐子:

  • 您可以使用不同的端口独立运行每个应用程序(在linux中,java -jar ...> app_logs.log &),您可以路由它(例如nginx)。请注意,重新启动不是问题。你可以编写自定义的 bash 脚本(如下所示:ps aux | grep appname 和 kill by PID)
  • 但是配置生产应用程序存在一些问题。属性文件将存档到 jar 中。

2) 战争

  • 您可以部署到容器中并运行它。在服务器上轻松管理。如果要重新配置应用,请从容器内的未存档文件夹中打开属性文件,根据需要更改它并重新启动容器。因此,管理和配置将很容易。
  • 但是,如果要使用另一个端口在此服务器中运行另一个应用,则必须安装容器的另一个副本并对其进行配置。

因此,在我的实践中,使用war应用程序比jar更容易管理和重新配置。


推荐