Merge branch '3.0.x' into 3.1.x

Closes gh-37594
3.1.x
Andy Wilkinson 1 year ago
commit 5015327886

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2022 the original author or authors. * Copyright 2012-2023 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -33,6 +33,7 @@ import org.springframework.boot.autoconfigure.transaction.TransactionManagerCust
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.data.neo4j.aot.Neo4jManagedTypes;
import org.springframework.data.neo4j.core.DatabaseSelectionProvider; import org.springframework.data.neo4j.core.DatabaseSelectionProvider;
import org.springframework.data.neo4j.core.Neo4jClient; import org.springframework.data.neo4j.core.Neo4jClient;
import org.springframework.data.neo4j.core.Neo4jOperations; import org.springframework.data.neo4j.core.Neo4jOperations;
@ -71,12 +72,17 @@ public class Neo4jDataAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public Neo4jMappingContext neo4jMappingContext(ApplicationContext applicationContext, Neo4jManagedTypes neo4jManagedTypes(ApplicationContext applicationContext) throws ClassNotFoundException {
Neo4jConversions neo4jConversions) throws ClassNotFoundException {
Set<Class<?>> initialEntityClasses = new EntityScanner(applicationContext).scan(Node.class, Set<Class<?>> initialEntityClasses = new EntityScanner(applicationContext).scan(Node.class,
RelationshipProperties.class); RelationshipProperties.class);
return Neo4jManagedTypes.fromIterable(initialEntityClasses);
}
@Bean
@ConditionalOnMissingBean
public Neo4jMappingContext neo4jMappingContext(Neo4jManagedTypes managedTypes, Neo4jConversions neo4jConversions) {
Neo4jMappingContext context = new Neo4jMappingContext(neo4jConversions); Neo4jMappingContext context = new Neo4jMappingContext(neo4jConversions);
context.setInitialEntitySet(initialEntityClasses); context.setManagedTypes(managedTypes);
return context; return context;
} }

@ -29,6 +29,7 @@ import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.neo4j.aot.Neo4jManagedTypes;
import org.springframework.data.neo4j.core.DatabaseSelection; import org.springframework.data.neo4j.core.DatabaseSelection;
import org.springframework.data.neo4j.core.DatabaseSelectionProvider; import org.springframework.data.neo4j.core.DatabaseSelectionProvider;
import org.springframework.data.neo4j.core.Neo4jClient; import org.springframework.data.neo4j.core.Neo4jClient;
@ -37,6 +38,7 @@ import org.springframework.data.neo4j.core.Neo4jTemplate;
import org.springframework.data.neo4j.core.convert.Neo4jConversions; import org.springframework.data.neo4j.core.convert.Neo4jConversions;
import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext; import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext;
import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager; import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.ReactiveTransactionManager; import org.springframework.transaction.ReactiveTransactionManager;
import org.springframework.transaction.TransactionManager; import org.springframework.transaction.TransactionManager;
@ -162,6 +164,29 @@ class Neo4jDataAutoConfigurationTests {
}); });
} }
@Test
void shouldProvideManagedTypes() {
this.contextRunner.run((context) -> {
assertThat(context).hasSingleBean(Neo4jManagedTypes.class);
assertThat(context.getBean(Neo4jMappingContext.class))
.extracting((mappingContext) -> ReflectionTestUtils.getField(mappingContext, "managedTypes"))
.isEqualTo(context.getBean(Neo4jManagedTypes.class));
});
}
@Test
void shouldReuseExistingManagedTypes() {
Neo4jManagedTypes managedTypes = Neo4jManagedTypes.from();
this.contextRunner.withBean("customManagedTypes", Neo4jManagedTypes.class, () -> managedTypes)
.run((context) -> {
assertThat(context).hasSingleBean(Neo4jManagedTypes.class);
assertThat(context).doesNotHaveBean("neo4jManagedTypes");
assertThat(context.getBean(Neo4jMappingContext.class))
.extracting((mappingContext) -> ReflectionTestUtils.getField(mappingContext, "managedTypes"))
.isSameAs(managedTypes);
});
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
static class CustomDatabaseSelectionProviderConfiguration { static class CustomDatabaseSelectionProviderConfiguration {

Loading…
Cancel
Save