我最近刚刚将我的一个团队的Spring Boot应用程序从2.1.3-RELEASE升级到现在的2.3.0-RELEASE,并将Hibernate版本从5.3.6.Final升级到5.4.15.Final。 >
一切都很好,但是现在,当应用程序在服务器上启动时,启动过程大约需要30秒钟,大约需要800-900秒(大约15分钟)才能启动。
需要注意的一点是,在2.1.3和2.3.0的localhost上运行时,应用程序启动是相同的,大约需要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,我仍然希望能找到答案。
答案 0 :(得分:1)
如果您可以升级到 Spring Boot 2.4.x,则有一个名为 /startup 的新 Actuator 端点,它会告诉您每个初始化 bean 花费了多长时间,这应该会告诉您什么原因如此之慢:https://medium.com/techwasti/startup-actuator-endpoint-spring-boot-54a8dd0a1fdb>
答案 1 :(得分:0)
我在尝试从Spring Boot 2.2.6升级到2.3.0时遇到了同样的问题。 在服务器或Docker容器中运行spring boot应用程序时,我观察到应用程序启动时间变慢,并且在win和mac上都看不到本地运行的问题。
出于好奇,我拿起spring-petclinic并尝试在docker上运行它。 那就是我得到的启动时间。
使用Spring Boot 2.3.0
2020-05-29 15:33:28.957 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 22.723 seconds (JVM running for 24.397)
2020-05-29 15:41:08.278 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 22.955 seconds (JVM running for 24.641)
2020-05-29 15:42:20.741 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 24.847 seconds (JVM running for 26.534)
2020-05-29 15:43:28.472 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 24.645 seconds (JVM running for 26.294)
2020-05-29 15:43:58.152 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 23.931 seconds (JVM running for 25.609)
2020-05-29 15:44:30.186 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 24.708 seconds (JVM running for 26.608)
使用Spring Boot 2.2.6
2020-05-29 15:40:25.829 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 19.062 seconds (JVM running for 20.474)
2020-05-29 15:41:35.797 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.18 seconds (JVM running for 19.582)
2020-05-29 15:48:36.693 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.648 seconds (JVM running for 20.067)
2020-05-29 15:49:00.379 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.548 seconds (JVM running for 19.978)
2020-05-29 15:49:23.282 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.808 seconds (JVM running for 20.218)
2020-05-29 15:49:47.100 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 19.862 seconds (JVM running for 21.285)
2020-05-29 15:50:08.247 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 16.599 seconds (JVM running for 17.916)
我想知道那方面发生了什么变化...
令人惊讶的是,Spring Boot 2.3.1看起来更好,几乎与2.2.x相同:
2020-06-19 21:16:18.935 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.886 seconds (JVM running for 20.552)
2020-06-19 21:16:43.461 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.637 seconds (JVM running for 20.091)
2020-06-19 21:17:07.226 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 18.526 seconds (JVM running for 20.007)
2020-06-19 21:17:30.172 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 19.694 seconds (JVM running for 21.209)
2020-06-19 21:17:57.662 INFO 1 --- [ main] o.s.s.petclinic.PetClinicApplication : Started PetClinicApplication in 20.348 seconds (JVM running for 21.85)
我建议尝试2.3.1。
答案 2 :(得分:0)
我工作的一部分是修补多个 Spring Boot 应用程序。我一般没有经历过较慢的启动,但是使用休眠搜索和弹簧启动数据的 1 个项目在延迟初始化方面存在严重问题,最终导致线程死锁。
https://github.com/spring-projects/spring-framework/issues/25111
要记住的另一件事是“新的”spring boot docker image builder :) https://spring.io/blog/2020/01/27/creating-docker-images-with-spring-boot-2-3-0-m1