Skip to content

Commit 9bc71fe

Browse files
committed
Polish "Upgrade to Spring Data Neo4j 6"
See spring-projectsgh-22299
1 parent 15cd343 commit 9bc71fe

File tree

35 files changed

+593
-732
lines changed

35 files changed

+593
-732
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,42 +20,52 @@
2020

2121
import org.neo4j.driver.Driver;
2222

23+
import org.springframework.beans.factory.ObjectProvider;
2324
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2425
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2526
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2627
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
28+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2729
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2830
import org.springframework.boot.autoconfigure.domain.EntityScanner;
2931
import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration;
3032
import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
33+
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
3134
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3235
import org.springframework.context.ApplicationContext;
3336
import org.springframework.context.annotation.Bean;
3437
import org.springframework.context.annotation.Configuration;
3538
import org.springframework.context.annotation.Import;
39+
import org.springframework.data.neo4j.config.Neo4jDefaultCallbacksRegistrar;
40+
import org.springframework.data.neo4j.core.DatabaseSelectionProvider;
41+
import org.springframework.data.neo4j.core.Neo4jClient;
42+
import org.springframework.data.neo4j.core.Neo4jOperations;
43+
import org.springframework.data.neo4j.core.Neo4jTemplate;
3644
import org.springframework.data.neo4j.core.convert.Neo4jConversions;
3745
import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext;
3846
import org.springframework.data.neo4j.core.schema.Node;
47+
import org.springframework.data.neo4j.core.transaction.Neo4jTransactionManager;
48+
import org.springframework.data.neo4j.repository.config.Neo4jRepositoryConfigurationExtension;
49+
import org.springframework.transaction.PlatformTransactionManager;
3950

4051
/**
41-
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data Neo4j. Automatic
42-
* configuration of base infrastructure that imports configuration for both imperative and
43-
* reactive Neo4j repositories.
52+
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data Neo4j.
4453
*
4554
* @author Michael Hunger
4655
* @author Josh Long
4756
* @author Vince Bickers
4857
* @author Stephane Nicoll
4958
* @author Kazuki Shimizu
50-
* @author Michael J Simons
59+
* @author Michael J. Simons
5160
* @since 1.4.0
5261
*/
5362
@Configuration(proxyBeanMethods = false)
54-
@ConditionalOnBean(Driver.class)
63+
@ConditionalOnClass({ Driver.class, Neo4jTransactionManager.class, PlatformTransactionManager.class })
5564
@EnableConfigurationProperties(Neo4jDataProperties.class)
56-
@AutoConfigureAfter(Neo4jAutoConfiguration.class)
65+
@ConditionalOnBean(Driver.class)
5766
@AutoConfigureBefore(TransactionAutoConfiguration.class)
58-
@Import({ Neo4jDataConfiguration.class, Neo4jReactiveDataConfiguration.class })
67+
@AutoConfigureAfter(Neo4jAutoConfiguration.class)
68+
@Import(Neo4jDefaultCallbacksRegistrar.class)
5969
public class Neo4jDataAutoConfiguration {
6070

6171
@Bean
@@ -74,4 +84,34 @@ public Neo4jMappingContext neo4jMappingContext(ApplicationContext applicationCon
7484
return context;
7585
}
7686

87+
@Bean
88+
@ConditionalOnMissingBean
89+
public DatabaseSelectionProvider databaseSelectionProvider(Neo4jDataProperties properties) {
90+
String database = properties.getDatabase();
91+
return (database != null) ? DatabaseSelectionProvider.createStaticDatabaseSelectionProvider(database)
92+
: DatabaseSelectionProvider.getDefaultSelectionProvider();
93+
}
94+
95+
@Bean(Neo4jRepositoryConfigurationExtension.DEFAULT_NEO4J_CLIENT_BEAN_NAME)
96+
@ConditionalOnMissingBean
97+
public Neo4jClient neo4jClient(Driver driver) {
98+
return Neo4jClient.create(driver);
99+
}
100+
101+
@Bean(Neo4jRepositoryConfigurationExtension.DEFAULT_NEO4J_TEMPLATE_BEAN_NAME)
102+
@ConditionalOnMissingBean(Neo4jOperations.class)
103+
public Neo4jTemplate neo4jTemplate(Neo4jClient neo4jClient, Neo4jMappingContext neo4jMappingContext,
104+
DatabaseSelectionProvider databaseNameProvider) {
105+
return new Neo4jTemplate(neo4jClient, neo4jMappingContext, databaseNameProvider);
106+
}
107+
108+
@Bean(Neo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)
109+
@ConditionalOnMissingBean(PlatformTransactionManager.class)
110+
public Neo4jTransactionManager transactionManager(Driver driver, DatabaseSelectionProvider databaseNameProvider,
111+
ObjectProvider<TransactionManagerCustomizers> optionalCustomizers) {
112+
Neo4jTransactionManager transactionManager = new Neo4jTransactionManager(driver, databaseNameProvider);
113+
optionalCustomizers.ifAvailable((customizer) -> customizer.customize(transactionManager));
114+
return transactionManager;
115+
}
116+
77117
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataConfiguration.java

Lines changed: 0 additions & 88 deletions
This file was deleted.

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataProperties.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.springframework.boot.autoconfigure.data.neo4j;
1818

1919
import org.springframework.boot.context.properties.ConfigurationProperties;
20-
import org.springframework.data.neo4j.core.DatabaseSelectionProvider;
2120

2221
/**
2322
* Configuration properties for Spring Data Neo4j.
@@ -29,10 +28,7 @@
2928
public class Neo4jDataProperties {
3029

3130
/**
32-
* A statically configured database. This property is only applicable when connecting
33-
* against a 4.0 cluster or server and will lead to errors if used with a prior
34-
* version of Neo4j. Leave this null (the default) to indicate that you like the
35-
* server to decide the default database to use.
31+
* Database name to use. By default, the server decides the default database to use.
3632
*/
3733
private String database;
3834

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,13 @@
2020
import reactor.core.publisher.Flux;
2121

2222
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
23-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
23+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
24+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
26-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
27-
import org.springframework.boot.autoconfigure.data.ConditionalOnRepositoryType;
28-
import org.springframework.boot.autoconfigure.data.RepositoryType;
29-
import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration;
3027
import org.springframework.context.annotation.Bean;
3128
import org.springframework.context.annotation.Configuration;
3229
import org.springframework.context.annotation.Import;
33-
import org.springframework.core.annotation.Order;
3430
import org.springframework.data.neo4j.config.Neo4jDefaultReactiveCallbacksRegistrar;
3531
import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider;
3632
import org.springframework.data.neo4j.core.ReactiveNeo4jClient;
@@ -42,49 +38,45 @@
4238
import org.springframework.transaction.ReactiveTransactionManager;
4339

4440
/**
45-
* Internal configuration for the reactive Neo4j client.
41+
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data's reactive Neo4j
42+
* support.
4643
*
4744
* @author Michael J. Simons
45+
* @author Stephane Nicoll
46+
* @since 2.4.0
4847
*/
4948
@Configuration(proxyBeanMethods = false)
50-
@ConditionalOnClass({ ReactiveNeo4jTransactionManager.class, ReactiveTransactionManager.class, Flux.class })
51-
@ConditionalOnRepositoryType(store = "neo4j", type = RepositoryType.REACTIVE)
52-
@AutoConfigureAfter(Neo4jAutoConfiguration.class)
53-
@AutoConfigureBefore(Neo4jReactiveRepositoriesConfiguration.class)
49+
@ConditionalOnClass({ Driver.class, ReactiveNeo4jTransactionManager.class, ReactiveTransactionManager.class,
50+
Flux.class })
51+
@ConditionalOnBean(Driver.class)
52+
@AutoConfigureAfter(Neo4jDataAutoConfiguration.class)
5453
@Import(Neo4jDefaultReactiveCallbacksRegistrar.class)
55-
class Neo4jReactiveDataConfiguration {
54+
public class Neo4jReactiveDataAutoConfiguration {
5655

57-
@Bean("reactiveDatabaseSelectionProvider")
58-
@ConditionalOnProperty(prefix = "spring.data.neo4j", name = "database")
56+
@Bean
5957
@ConditionalOnMissingBean
60-
@Order(-30)
61-
ReactiveDatabaseSelectionProvider staticDatabaseSelectionProvider(Neo4jDataProperties dataProperties) {
62-
return ReactiveDatabaseSelectionProvider.createStaticDatabaseSelectionProvider(dataProperties.getDatabase());
63-
}
64-
65-
@Bean("reactiveDatabaseSelectionProvider")
66-
@ConditionalOnMissingBean
67-
@Order(-20)
68-
ReactiveDatabaseSelectionProvider defaultSelectionProvider() {
69-
return ReactiveDatabaseSelectionProvider.getDefaultSelectionProvider();
58+
public ReactiveDatabaseSelectionProvider reactiveDatabaseSelectionProvider(Neo4jDataProperties dataProperties) {
59+
String database = dataProperties.getDatabase();
60+
return (database != null) ? ReactiveDatabaseSelectionProvider.createStaticDatabaseSelectionProvider(database)
61+
: ReactiveDatabaseSelectionProvider.getDefaultSelectionProvider();
7062
}
7163

7264
@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_NEO4J_CLIENT_BEAN_NAME)
7365
@ConditionalOnMissingBean
74-
ReactiveNeo4jClient neo4jClient(Driver driver) {
66+
public ReactiveNeo4jClient reactiveNeo4jClient(Driver driver) {
7567
return ReactiveNeo4jClient.create(driver);
7668
}
7769

7870
@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_NEO4J_TEMPLATE_BEAN_NAME)
7971
@ConditionalOnMissingBean(ReactiveNeo4jOperations.class)
80-
ReactiveNeo4jTemplate neo4jTemplate(ReactiveNeo4jClient neo4jClient, Neo4jMappingContext neo4jMappingContext,
81-
ReactiveDatabaseSelectionProvider databaseNameProvider) {
72+
public ReactiveNeo4jTemplate reactiveNeo4jTemplate(ReactiveNeo4jClient neo4jClient,
73+
Neo4jMappingContext neo4jMappingContext, ReactiveDatabaseSelectionProvider databaseNameProvider) {
8274
return new ReactiveNeo4jTemplate(neo4jClient, neo4jMappingContext, databaseNameProvider);
8375
}
8476

8577
@Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)
8678
@ConditionalOnMissingBean(ReactiveTransactionManager.class)
87-
ReactiveTransactionManager transactionManager(Driver driver,
79+
public ReactiveTransactionManager reactiveTransactionManager(Driver driver,
8880
ReactiveDatabaseSelectionProvider databaseNameProvider) {
8981
return new ReactiveNeo4jTransactionManager(driver, databaseNameProvider);
9082
}
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616

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

19+
import org.neo4j.driver.Driver;
1920
import reactor.core.publisher.Flux;
2021

22+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
23+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2124
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2225
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2326
import org.springframework.boot.autoconfigure.data.ConditionalOnRepositoryType;
@@ -29,16 +32,20 @@
2932
import org.springframework.data.neo4j.repository.support.ReactiveNeo4jRepositoryFactoryBean;
3033

3134
/**
32-
* Imports the registrar for reactive Neo4j repositories.
35+
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Neo4j Reactive
36+
* Repositories.
3337
*
3438
* @author Michael J. Simons
39+
* @author Stephane Nicoll
40+
* @since 2.4.0
3541
*/
3642
@Configuration(proxyBeanMethods = false)
37-
@ConditionalOnClass({ Flux.class, ReactiveNeo4jRepository.class })
43+
@ConditionalOnClass({ Driver.class, ReactiveNeo4jRepository.class, Flux.class })
3844
@ConditionalOnMissingBean({ ReactiveNeo4jRepositoryFactoryBean.class,
3945
ReactiveNeo4jRepositoryConfigurationExtension.class })
4046
@ConditionalOnRepositoryType(store = "neo4j", type = RepositoryType.REACTIVE)
41-
@Import(Neo4jReactiveRepositoriesConfigureRegistrar.class)
42-
final class Neo4jReactiveRepositoriesConfiguration {
47+
@Import(Neo4jReactiveRepositoriesRegistrar.class)
48+
@AutoConfigureAfter(Neo4jReactiveDataAutoConfiguration.class)
49+
public class Neo4jReactiveRepositoriesAutoConfiguration {
4350

4451
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,18 @@
1919
import java.lang.annotation.Annotation;
2020

2121
import org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport;
22+
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
2223
import org.springframework.data.neo4j.repository.config.EnableReactiveNeo4jRepositories;
2324
import org.springframework.data.neo4j.repository.config.ReactiveNeo4jRepositoryConfigurationExtension;
2425
import org.springframework.data.repository.config.RepositoryConfigurationExtension;
2526

2627
/**
27-
* {@link ImportBeanDefinitionRegistrar} used to auto-configure reactive Spring Data Neo4j
28+
* {@link ImportBeanDefinitionRegistrar} used to auto-configure Spring Data Neo4j reactive
2829
* Repositories.
2930
*
3031
* @author Michael J. Simons
3132
*/
32-
final class Neo4jReactiveRepositoriesConfigureRegistrar extends AbstractRepositoryConfigurationSourceSupport {
33+
class Neo4jReactiveRepositoriesRegistrar extends AbstractRepositoryConfigurationSourceSupport {
3334

3435
@Override
3536
protected Class<? extends Annotation> getAnnotation() {
@@ -38,7 +39,7 @@ protected Class<? extends Annotation> getAnnotation() {
3839

3940
@Override
4041
protected Class<?> getConfiguration() {
41-
return SpringDataNeo4jConfiguration.class;
42+
return EnableReactiveNeo4jRepositoriesConfiguration.class;
4243
}
4344

4445
@Override
@@ -47,7 +48,7 @@ protected RepositoryConfigurationExtension getRepositoryConfigurationExtension()
4748
}
4849

4950
@EnableReactiveNeo4jRepositories
50-
private static class SpringDataNeo4jConfiguration {
51+
private static class EnableReactiveNeo4jRepositoriesConfiguration {
5152

5253
}
5354

0 commit comments

Comments
 (0)