3

我继承了一个 SpringBoot 应用程序,该应用程序最初使用 Spring boot 1.3(嵌入式 Tomcat)运行,使用该java -jar project.war命令启动应用程序。

自从我们升级到 Spring boot 1.4 后,我们注意到与在 IDE(Eclipse 和 IntelliJ)中运行应用程序相比,它的启动速度要慢得多,搜索时的延迟也更长。

一个很好的例子是搜索“SMITH”。当我们在 IDE 中运行应用程序时,搜索大约需要 5-6 秒。使用完全相同的代码库、嵌入式服务器配置和主机——在“SMITH”上搜索——当开始使用时java -jar project.war,需要 14 秒。

我们已经向上、向下和向后分析了应用程序,但仍然无法弄清楚为什么它在我们的 IDE 中运行得这么快。

要解决上述问题,我们必须执行以下操作:

  1. 将战争爆发到临时目录
  2. cd 到 WEB-INF 目录
  3. java -classpath "lib\:classes\:lib\*.jar" my.package.Main

为什么这两个命令行功能有如此大的差异?为 Java 提供类路径真的能大大提高性能吗?

==================================================== ======================= 编辑:我已经向Spring提交了https://github.com/spring-projects/spring-boot/issues/8046,这基本上是从这里剪切和粘贴

编辑 2:如果您遇到此问题并且可以共享您的代码,请使用 Spring 这样做(使用上面的链接);我公司的环境被锁定。

4

1 回答 1

0

在 Spring 的 github 上发现了这个问题。看起来打包的存档总是会更慢(我怀疑是因为它需要在运行之前分解存档),但是 WAR 存档应该定义一个文档根,而 JAR 不是,这几乎可以解释性能差异. 还有关于 JAR 和 WAR 之间区别的StackOverflow问题,其中还包含似乎支持这一点的链接。

不是 100% 确定这是否是答案,但希望它至少能让其他人走上正确的轨道

于 2017-01-19T23:25:05.490 回答