Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 09ed59f

Browse files
Merge branch '3.4.x' into 3.5.x
Closes gh-46634
2 parents 2cdf434 + 85fb93e commit 09ed59f

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

‎spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/JpaRepositoriesAutoConfiguration.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import javax.sql.DataSource;
2222

23+
import org.springframework.boot.LazyInitializationExcludeFilter;
2324
import org.springframework.boot.autoconfigure.AutoConfiguration;
2425
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2526
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
@@ -91,6 +92,11 @@ public EntityManagerFactoryBuilderCustomizer entityManagerFactoryBootstrapExecut
9192
};
9293
}
9394

95+
@Bean
96+
static LazyInitializationExcludeFilter eagerJpaMetamodelCacheCleanup() {
97+
return (name, definition, type) -> "org.springframework.data.jpa.util.JpaMetamodelCacheCleanup".equals(name);
98+
}
99+
94100
private AsyncTaskExecutor determineBootstrapExecutor(Map<String, AsyncTaskExecutor> taskExecutors) {
95101
if (taskExecutors.size() == 1) {
96102
return taskExecutors.values().iterator().next();

‎spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/AbstractJpaRepositoriesAutoConfigurationTests.java‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@
1616

1717
package org.springframework.boot.autoconfigure.data.jpa;
1818

19+
import java.util.Map;
20+
1921
import jakarta.persistence.EntityManagerFactory;
22+
import jakarta.persistence.metamodel.Metamodel;
2023
import org.junit.jupiter.api.Test;
2124

25+
import org.springframework.boot.LazyInitializationBeanFactoryPostProcessor;
2226
import org.springframework.boot.autoconfigure.AutoConfigurations;
2327
import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
2428
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
@@ -40,8 +44,10 @@
4044
import org.springframework.context.annotation.Import;
4145
import org.springframework.core.task.SimpleAsyncTaskExecutor;
4246
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
47+
import org.springframework.data.jpa.util.JpaMetamodel;
4348
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
4449
import org.springframework.scheduling.annotation.EnableScheduling;
50+
import org.springframework.test.util.ReflectionTestUtils;
4551
import org.springframework.transaction.PlatformTransactionManager;
4652

4753
import static org.assertj.core.api.Assertions.assertThat;
@@ -138,6 +144,19 @@ void bootstrapModeIsDefaultByDefault() {
138144
.isNull());
139145
}
140146

147+
@Test
148+
void whenLazyInitializationIsEnabledJpaMetamodelCacheIsClearedOnContextClose() {
149+
this.contextRunner.withUserConfiguration(TestConfiguration.class)
150+
.withBean(LazyInitializationBeanFactoryPostProcessor.class)
151+
.run((context) -> assertThat(jpaMetamodelCache()).isNotEmpty());
152+
assertThat(jpaMetamodelCache()).isEmpty();
153+
}
154+
155+
@SuppressWarnings("unchecked")
156+
private Map<Metamodel, JpaMetamodel> jpaMetamodelCache() {
157+
return (Map<Metamodel, JpaMetamodel>) ReflectionTestUtils.getField(JpaMetamodel.class, "CACHE");
158+
}
159+
141160
@Configuration(proxyBeanMethods = false)
142161
@EnableScheduling
143162
@Import(TestConfiguration.class)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /