【发布时间】:2020-09-15 02:51:43
【问题描述】:
我最近刚刚将我的一个团队 Spring Boot 应用程序从 2.1.3-RELEASE 升级到现在的 2.3.0-RELEASE,并将 Hibernate 版本从 5.3.6.Final 升级到 5.4.15.Final。
一切都很好,但是现在当应用程序在服务器上启动时,启动需要 800-900 秒(大约 15 分钟),而过去只需要大约 30 秒。
需要注意的是,在 localhost 上运行时,使用 2.1.3 和 2.3.0,应用程序启动是相同的,大约 12-15 秒。
只有在部署到服务器时才会遇到启动缓慢的问题。
我确定问题出在新版本的 Spring Boot 上,因为我切换到 SpringBoot 2.1.3 并将 Hibernate 保留为 5.4.15,并且启动速度很快。
那么,在最近的 SpringBoot 版本中是否发生了一些变化,我必须设置一个属性来禁用某些检查或其他什么?
我看到的大多数文章和帖子都说问题出在 Hibernate 并设置此属性 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false 但我这样做了,但没有任何效果。
更新:
我尝试了spring.main.lazy-initialization=true 属性,但它对启动性能没有影响。
更新 2:
我从 2.3.0 降级到 2.2.7,平均启动时间为 170 秒,而 2.3.0 平均启动时间为 800 秒。大约 3 分钟的启动时间仍然很糟糕,但是,除了版本之外没有任何变化,相差 12 分钟,我想知道它是否过于雄心勃勃,无法使用最新版本的 Spring Boot。
如果有人对为什么我们会从 2.1.3 的 30 秒开始时间变为 2.2.7 的 3 分钟开始时间提出一些建议,我仍然非常好奇。
在 2.1.x 和 2.2.x 之间引入了重大变化吗?
最后更新
我尝试了 2.2.5 版本,与 2.1.3 相比,它的启动性能没有下降。如果有什么启动性能有所提高。所以,这让我相信 2.2.6 及更高版本的引擎盖下发生了一些变化。
我将坚持使用 2.2.5,但如果有人尝试使用这些最新版本的 Spring Boot,我仍然希望得到答案。
【问题讨论】:
-
我有一个简单的spring boot应用并更新到2.3.0版本,启动应用的时间几乎没有变化。可以打开调试日志看看哪个动作慢吗?
-
这可能与自动配置有关。这可以解释惰性初始化没有影响以及为什么简单的应用程序不会检测到它。我们可以尝试的一件事是禁用
@EnableAutoConfiguration(这可能相对昂贵,因为它会遍历所有工厂并试图找出应该导入的内容)并导入使用的特定配置。见stackoverflow.com/questions/33134030/… -
我在服务器上的 docker 中运行 2.3.0 时遇到了同样的问题。启动很慢,应用程序没有通过就绪探测检查,当降级到 2.2.7 时没问题。
-
嗨科迪,你找到答案了吗?我仍然被这个问题困扰
-
@JoséMi,我从来没有找到 2.3.0 的实际答案或解决方案。但是,我只是简单地降级到了 2.2.5,这似乎是我当时所能达到的最高水平,而没有引起任何性能缓慢的问题。
标签: java spring hibernate spring-boot