在生产服务器上发布 Spring Boot 应用程序并管理更新

问题描述 投票:0回答:1

我想询问一下基于 Maven 或 Gradle 的带有嵌入式 Tomcat 的 Spring Boot Web 应用程序的生产运行体验。到目前为止,我一直在使用一个普通的 Spring 应用程序,部署在 Tomcat 上,没有依赖项管理器,所有外部 jar 都收集在

/WEB-INF/lib/
中。

我有一个典型的 Web 应用程序,它主要是一个多用户 Web 服务,并且经常更改。我经常更改视图(在我的例子中为 JSP 文件)、Java 类以及 Javascript 或 CSS 文件中的某些内容。

我不想每次更新都生成新的 .jar 文件,将其上传到服务器,然后重新启动应用程序。我想处理解压的文件并仅替换已更改的文件。 我可以在“调试”模式下运行应用程序,以便自动加载对类的简单更改。随着我的应用程序中使用的外部库(依赖项)的更改,我当然可以“重新加载”应用程序,但我希望这尽快发生,并且对用户的影响最小。

如何组织在服务器上更新应用程序的过程?

我假设在服务器上我可以执行来自 SVN 或 GIT 存储库的应用程序更新,并且我可以在那里执行 Maven 或 Gradle 脚本。我希望更新尽可能快,例如:

  1. Java 源代码、视图和静态文件的“git pull”
  2. 从依赖项中更新外部库,最终下载新的 jar 文件并删除未使用的文件。
  3. 在服务器上编译新类
  4. 仅在必要时 - 重新加载应用程序

或者也许对于这样的需求,部署在 Tomcat 上的 Spring Boot 应用程序的模型,而不是嵌入 Tomcat 更好?你有什么经历?

第二个问题:在Tomcat上部署的应用程序中,我使用了Tomcat Manager重新加载应用程序的便捷功能。这是一个非常快的操作,比重新启动整个应用程序要快得多。此外,它还允许您序列化和恢复所有会话。 在带有嵌入式 Tomcat 的 Spring Boot 中,这样的“重新加载”可能吗?

java spring spring-boot maven tomcat
1个回答
0
投票

如果您要在嵌入式 Tomcat 服务器上更新 Spring Boot Web 应用程序,以下是顺利完成此操作的最佳方法:

依赖管理:使用 Maven 或 Gradle。 mvn clean install 或 gradle build 等命令使更新外部库变得容易。

版本控制:使用 SVN 或 Git 保持代码井井有条。这使得从存储库中提取更新变得轻而易举。

增量更新:不要替换整个应用程序,而只专注于更改必要的内容:Java 类、JSP 文件、JS 和 CSS。

编译新类:拉取更新后,在服务器上编译新类以保持最新状态。

应用程序重新加载:为了顺利更新,请考虑优雅的重新加载策略。 Spring Boot Actuator 等工具可以提供帮助。

对于重新加载应用程序,实现 Tomcat Manager 的控制级别可能需要对 Spring Boot 和嵌入式 Tomcat 进行一些探索。

通过专注于高效的依赖管理、版本控制和优雅的重新加载,您的更新将是无缝的。

© www.soinside.com 2019 - 2024. All rights reserved.