将 JPA 数据模型从 Java 11 迁移到 17 + SpringBoot 2.7 到 3.1 后出现 OOM

问题描述 投票:0回答:1

我在使用 SpringBoot 3.1.3 和现有 JPA 数据模型的新应用程序时遇到问题。我们之前已经在其他几个应用程序中使用过该数据模型 - 但使用的是 Java 11SpringBoot 2.7.x

这次我想要使用 Java 17,因此我使用 OpenRewrite 将数据模型从 javax

迁移
jakarta
。据我所知,这非常有效。项目本身构建没有任何错误,我还修复了 Hibernate 抱怨的单个无效
@Table(indexes={@Index(...)})
。之前,SpringBoot 2.7从未验证过无效的索引注释

一旦我修复了SpringBoot 3.1版本不再抱怨,但无法启动并遇到内存不足——即使有几GB的最大堆。我在日志中看到的所有内容如下:

2023-09-21T16:46:56.550+02:00  INFO 81372 --- [  restartedMain] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2023-09-21T16:46:56.573+02:00  INFO 81372 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.2.7.Final
2023-09-21T16:46:56.574+02:00  INFO 81372 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000406: Using bytecode reflection optimizer
2023-09-21T16:46:56.647+02:00  INFO 81372 --- [  restartedMain] o.h.b.i.BytecodeProviderInitiator        : HHH000021: Bytecode provider name : bytebuddy
2023-09-21T16:46:56.709+02:00  INFO 81372 --- [  restartedMain] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
2023-09-21T16:46:56.718+02:00  INFO 81372 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-09-21T16:46:56.931+02:00  INFO 81372 --- [  restartedMain] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection oracle.jdbc.driver.T4CConnection@51420c43
2023-09-21T16:46:56.933+02:00  INFO 81372 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2023-09-21T16:46:57.517+02:00  INFO 81372 --- [  restartedMain] o.h.b.i.BytecodeProviderInitiator        : HHH000021: Bytecode provider name : bytebuddy

经过较长一段时间后浪费内存失败终止应用程序:

2023-09-21T16:49:44.584+02:00  WARN 81372 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Java heap space
2023-09-21T16:49:44.585+02:00  INFO 81372 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2023-09-21T16:49:44.595+02:00  INFO 81372 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2023-09-21T16:49:44.598+02:00  INFO 81372 --- [  restartedMain] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2023-09-21T16:49:44.609+02:00  INFO 81372 --- [  restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-09-21T16:49:44.622+02:00 ERROR 81372 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Java heap space
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.11.jar:6.0.11]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1155) ~[spring-context-6.0.11.jar:6.0.11]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) ~[spring-context-6.0.11.jar:6.0.11]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) ~[spring-context-6.0.11.jar:6.0.11]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.3.jar:3.1.3]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.3.jar:3.1.3]
    at eu.ecg.eureka.rlp.fmp.migration.Application.main(Application.java:20) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.1.3.jar:3.1.3]
Caused by: java.lang.OutOfMemoryError: Java heap space
    at java.base/java.util.Arrays.copyOf(Arrays.java:3537) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:228) ~[na:na]
    at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:582) ~[na:na]
    at java.base/java.lang.StringBuilder.append(StringBuilder.java:179) ~[na:na]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.appendSql(AbstractSqlAstTranslator.java:517) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.tree.expression.ColumnReference$$Lambda$1307/0x0000000801015930.accept(Unknown Source) ~[na:na]
    at org.hibernate.sql.ast.tree.expression.ColumnReference.appendReadExpression(ColumnReference.java:191) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.tree.expression.ColumnReference.appendReadExpression(ColumnReference.java:196) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.tree.expression.ColumnReference.appendReadExpression(ColumnReference.java:171) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitColumnReference(AbstractSqlAstTranslator.java:6086) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.tree.expression.ColumnReference.accept(ColumnReference.java:222) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.renderExpressionAsClauseItem(AbstractSqlAstTranslator.java:5035) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.renderSelectExpression(AbstractSqlAstTranslator.java:5020) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitSqlSelectExpression(AbstractSqlAstTranslator.java:5015) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitSqlSelection(AbstractSqlAstTranslator.java:4997) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.dialect.OracleSqlAstTranslator.visitSqlSelection(OracleSqlAstTranslator.java:98) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitSqlSelections(AbstractSqlAstTranslator.java:4662) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitSelectClause(AbstractSqlAstTranslator.java:4563) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitQuerySpec(AbstractSqlAstTranslator.java:3031) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.dialect.OracleSqlAstTranslator.visitQuerySpec(OracleSqlAstTranslator.java:269) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.tree.select.QuerySpec.accept(QuerySpec.java:119) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.visitSelectStatement(AbstractSqlAstTranslator.java:986) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.translateSelect(AbstractSqlAstTranslator.java:849) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.sql.ast.spi.AbstractSqlAstTranslator.translate(AbstractSqlAstTranslator.java:799) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.loader.ast.internal.SingleIdLoadPlan.<init>(SingleIdLoadPlan.java:67) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.createLoadPlan(SingleIdEntityLoaderStandardImpl.java:197) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.prepare(SingleIdEntityLoaderStandardImpl.java:55) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.prepareLoader(AbstractEntityPersister.java:3447) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.postInstantiate(AbstractEntityPersister.java:3441) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.finishInitialization(MappingMetamodelImpl.java:204) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.internal.SessionFactoryImpl.initializeMappingModel(SessionFactoryImpl.java:320) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:270) ~[hibernate-core-6.2.7.Final.jar:6.2.7.Final]

我不知道从哪里开始看。有什么推荐吗

PS:

一个小补充...我还用

@Type(type = "yes_no")
替换了所有
@Convert(converter = YesNoConverter.class)
,因为 Hibernate 也抱怨了这一点。

// FIXME: @Type(type = "yes_no")
@Convert(converter = YesNoConverter.class)
private boolean editable = true;
java spring-boot hibernate jpa
1个回答
0
投票

我也遇到了同样的错误。我想询问您得到的任何解决方案。我无法添加评论。 谢谢你

© www.soinside.com 2019 - 2024. All rights reserved.