最新项目我使用了Spring boot,准备部署到生产环境,我想知道哪种方式运行应用程序性能更好或性能相同?
另外,发布到生产环境时,如果要去掉devtools的依赖。
最佳答案
这是一个广泛的问题。答案是这取决于您的要求。
就个人而言,我现在更喜欢使用 Spring Boot 的独立应用程序。一个应用程序,一个 JVM。它在部署和运行时行为方面为您提供了更大的灵活性和可靠性。 Spring Boot 1.3.0.RELEASE 带有 init scripts
,它允许您将 Spring Boot 应用程序作为 Linux 服务器上的守护程序运行。例如,您可以将 rpm-maven-plugin
集成到您的构建管道中,以便将您的应用程序打包和发布为 RPM 进行部署,或者您可以轻松地 dockerize 您的应用程序。
通过经典部署到 Tomcat 等 servlet 容器中,您将在重新部署后面临各种内存泄漏,例如日志框架、管理不善的线程本地对象、JDBC drivers 等等。
您要么花时间修复您使用的应用程序和框架中的所有内存泄漏,要么在部署后重新启动 servlet 容器。将您的应用程序作为独立版本运行,您不必关心这些内存泄漏,因为您必须重新启动才能启动新版本。
过去,多个 web 应用程序在一个 servlet 容器中运行。这可能会导致所有 webapp 的性能下降,因为每个 webapp 都有自己的内存、cpu 和 GC 特性,这些特性可能会相互干扰。此外,线程池等资源在所有 web 应用程序之间共享。
事实上,一个独立的应用程序并不能避免由于服务器上的高负载而导致的性能下降,但它不会在内存利用率或 GC 方面干扰其他应用程序。请记住,如果您可以专注于一个应用程序的特性,那么性能或 GC 调优会简单得多。一旦您需要在一个 servlet 容器中找到多个 web 应用程序的公分母,它就会变得复杂。
最后,您的决定可能取决于您的工作环境。如果您在一家由运营部门运行和维护软件的公司中构建应用程序,则您更有可能被迫发起一场 war 。如果您可以自由选择部署目标,那么我推荐一个独立的应用程序。
为了从生产版本中删除 devtools
you can use set the excludeDevtools build property to completely remove the JAR. The property is supported with both the Maven and Gradle plugins.
请参阅 Spring Boot documentation 。
关于spring-boot - Spring boot 项目发布到生产环境选择war(standalone tomcat)还是jar(embedded tomcat)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33795311/