Spring Boot 启动构建 JPA 容器非常慢
Posted
技术标签:
【中文标题】Spring Boot 启动构建 JPA 容器非常慢【英文标题】:Spring boot start up Building JPA container very slow 【发布时间】:2019-03-01 19:21:15 【问题描述】:我正在使用带有 JPA 的 Spring Boot,它最近开始需要很长时间才能启动。它总是卡在控制台的这条线上大约 5 分钟:
Building JPA container EntityManagerFactory for persistence unit 'default'
我看过这个相关的帖子:Very slow Spring Boot application startup 并尝试将 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false 添加到我的 application.properties 但这根本没有任何区别。
有什么办法可以调试这段时间spring boot实际上在做什么? 我的gradle依赖如下:
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-security')
compile('org.springframework.boot:spring-boot-starter-tomcat')
compile('org.springframework.boot:spring-boot-starter-data-redis')
compile('org.springframework.boot:spring-boot-starter-mail')
compile('org.springframework.session:spring-session:1.3.1.RELEASE')
compile('mysql:mysql-connector-java')
compile('org.apache.commons:commons-lang3:3.7')
compile('com.google.cloud:google-cloud-storage:1.14.0')
compile('javaxt:javaxt-core:1.8.1')
compile('org.hibernate:hibernate-envers:5.0.12.Final')
testCompile('org.springframework.boot:spring-boot-starter-test')
我使用的是 Spring Boot 版本 1.5.9.RELEASE
我的 application.properties 有这个:
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://notreal.server.com:3306/testdb
spring.datasource.username=NotRealUser
spring.datasource.password=NotRealPwd
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
非常感谢任何建议/帮助。
【问题讨论】:
升级你的系统配置 将所有内容的日志级别设置为 TRACE 【参考方案1】:我设法通过在我的 application.properties 中设置 spring.jpa.hibernate.ddl-auto=none
(之前设置为 auto
)解决了我的问题。
我认为这可以防止 Hibernate 尝试将对象模型与数据库中的表进行比较。之后 Springboot 启动要快得多。
我应该提一下,那时我们还在项目中添加了 Hibernate Envers(审计框架),它在数据库中生成了一堆新表。所以这可能使问题更加复杂。
【讨论】:
【参考方案2】:在 Hashicorp Nomad 内部也有同样的问题。适用于任何分配内存的系统。
如果您查看系统日志(不是 Spring Apps),您会发现此步骤更占用内存。增加应用程序的内存,它应该运行spring.jpa.hibernate.ddl-auto=auto
【讨论】:
以上是关于Spring Boot 启动构建 JPA 容器非常慢的主要内容,如果未能解决你的问题,请参考以下文章
在我的 spring-boot 应用程序启动之前,我如何等待数据库容器启动
spring boot系列01--快速构建spring boot项目