最新项目我用Spring引导,准备部署到生产环境,我想知道哪种方式运行应用程序有更好的性能还是具有相同的性能?Spring引导项目发布到生产环境选择war(独立tomcat)还是jar(嵌入式tomcat)?
- 生成war包,并把它放在一个单独的tomcat
- 生成jar包,并使用嵌入式的tomcat
此外,在是否应该删除devtools依赖性发布到生产环境。
最新项目我用Spring引导,准备部署到生产环境,我想知道哪种方式运行应用程序有更好的性能还是具有相同的性能?Spring引导项目发布到生产环境选择war(独立tomcat)还是jar(嵌入式tomcat)?
此外,在是否应该删除devtools依赖性发布到生产环境。
这是一个广泛的问题。答案取决于你的要求。个人而言,我更喜欢今天使用Spring Boot的独立应用程序。一个应用程序,一个JVM。它为您提供了部署和运行时行为方面的更多灵活性和可靠性。 Spring Boot 1.3.0.RELEASE附带init scripts
,它允许您在Linux服务器上将您的Spring Boot应用程序作为守护程序运行。例如,您可以将rpm-maven-plugin
集成到您的构建管道中,以便将应用程序打包并发布为部署的RPM,或者您可以轻松地应用您的应用程序。
通过经典的部署到像Tomcat这样的servlet容器中,重新部署后会面临各种内存泄漏,例如日志框架,管理不当的线程本地对象JDBC drivers等等。 您可以花时间修复您所使用的应用程序和框架中的所有内存泄漏,也可以在部署后重新启动servlet容器。将应用程序作为独立版本运行,您不必关心这些内存泄漏,因为您需要重新启动才能为您提供新版本。
过去,几个webapps在一个servlet容器中运行。这可能会导致所有webapps的性能下降,因为每个webapp都有自己的内存,cpu和GC特性,这些特性可能会相互干扰。此外,像线程池这样的资源在所有的webapps之间共享。
实际上,由于服务器负载较高,独立应用程序不会因性能下降而受到影响,但它在内存利用率或GC方面不会影响其他应用程序。请记住,如果您只关注一个应用程序的特性,则性能或GC调优将更加简单。一旦你需要在一个servlet容器中找到几个webapps的共同点,它就变得复杂了。
最后,您的决定可能取决于您的工作环境。如果你正在一家软件公司运行和维护运营的公司建立一个应用程序,那么你很可能被迫构建一场战争。如果您可以自由选择部署目标,那么我推荐一个独立的应用程序。
为了从生产中删除devtools建立
您可以使用设置excludeDevtools建立财产完全 删除JAR。 Maven和 Gradle插件均支持该属性。
查看Spring Boot documentation。
明白了,谢谢! – zhuguowei