Skip to content

Commit fdf9310

Browse files
committed
Merge branch 'gh-22647'
This upgrades to Spring Data 2020.0.0 snapshots which required some changes in Spring Data REST and Spring Data Elasticsearch before upgrading to Spring Data Neo4j 6. Closes gh-22299
2 parents 044408e + 9bc71fe commit fdf9310

File tree

43 files changed

+1117
-894
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1117
-894
lines changed

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/mappings/servlet/DispatcherServletsMappingDescriptionProvider.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -32,7 +32,6 @@
3232
import org.springframework.boot.actuate.web.mappings.MappingDescriptionProvider;
3333
import org.springframework.boot.web.servlet.ServletRegistrationBean;
3434
import org.springframework.context.ApplicationContext;
35-
import org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping;
3635
import org.springframework.util.ClassUtils;
3736
import org.springframework.web.context.WebApplicationContext;
3837
import org.springframework.web.method.HandlerMethod;
@@ -51,6 +50,7 @@
5150
* @author Stephane Nicoll
5251
* @since 2.0.0
5352
*/
53+
@SuppressWarnings("deprecation")
5454
public class DispatcherServletsMappingDescriptionProvider implements MappingDescriptionProvider {
5555

5656
private static final List<HandlerMappingDescriptionProvider<? extends HandlerMapping>> descriptionProviders;
@@ -171,8 +171,8 @@ private DispatcherServletMappingDescription describe(Entry<String, Object> mappi
171171

172172
}
173173

174-
private static final class DelegatingHandlerMappingDescriptionProvider
175-
implements HandlerMappingDescriptionProvider<DelegatingHandlerMapping> {
174+
private static final class DelegatingHandlerMappingDescriptionProvider implements
175+
HandlerMappingDescriptionProvider<org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping> {
176176

177177
private final List<HandlerMappingDescriptionProvider<?>> descriptionProviders;
178178

@@ -182,12 +182,13 @@ private DelegatingHandlerMappingDescriptionProvider(
182182
}
183183

184184
@Override
185-
public Class<DelegatingHandlerMapping> getMappingClass() {
186-
return DelegatingHandlerMapping.class;
185+
public Class<org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping> getMappingClass() {
186+
return org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping.class;
187187
}
188188

189189
@Override
190-
public List<DispatcherServletMappingDescription> describe(DelegatingHandlerMapping handlerMapping) {
190+
public List<DispatcherServletMappingDescription> describe(
191+
org.springframework.data.rest.webmvc.support.DelegatingHandlerMapping handlerMapping) {
191192
List<DispatcherServletMappingDescription> descriptions = new ArrayList<>();
192193
for (HandlerMapping delegate : handlerMapping.getDelegates()) {
193194
descriptions.addAll(

spring-boot-project/spring-boot-autoconfigure/build.gradle

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,6 @@ dependencies {
171171
testImplementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
172172
testImplementation("org.junit.jupiter:junit-jupiter")
173173
testImplementation("org.mockito:mockito-core")
174-
testImplementation("org.neo4j:neo4j-ogm-bolt-native-types")
175-
testImplementation("org.neo4j:neo4j-ogm-http-driver")
176-
testImplementation("org.neo4j:neo4j-ogm-embedded-driver")
177174
testImplementation("org.springframework:spring-test")
178175
testImplementation("org.springframework.kafka:spring-kafka-test")
179176
testImplementation("org.springframework.security:spring-security-test")

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

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

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

Lines changed: 62 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,37 @@
1616

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

19-
import java.util.List;
19+
import java.util.Set;
2020

21-
import org.neo4j.ogm.session.SessionFactory;
22-
import org.neo4j.ogm.session.event.EventListener;
21+
import org.neo4j.driver.Driver;
2322

24-
import org.springframework.beans.factory.BeanFactory;
2523
import org.springframework.beans.factory.ObjectProvider;
26-
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
24+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
25+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
2726
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
27+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2828
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2929
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
30-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
31-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
32-
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
33-
import org.springframework.boot.autoconfigure.domain.EntityScanPackages;
30+
import org.springframework.boot.autoconfigure.domain.EntityScanner;
31+
import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration;
32+
import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
3433
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
3534
import org.springframework.boot.context.properties.EnableConfigurationProperties;
35+
import org.springframework.context.ApplicationContext;
3636
import org.springframework.context.annotation.Bean;
3737
import org.springframework.context.annotation.Configuration;
3838
import org.springframework.context.annotation.Import;
39-
import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
40-
import org.springframework.data.neo4j.web.support.OpenSessionInViewInterceptor;
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;
44+
import org.springframework.data.neo4j.core.convert.Neo4jConversions;
45+
import org.springframework.data.neo4j.core.mapping.Neo4jMappingContext;
46+
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;
4149
import org.springframework.transaction.PlatformTransactionManager;
42-
import org.springframework.util.StringUtils;
43-
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
44-
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
4550

4651
/**
4752
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data Neo4j.
@@ -51,76 +56,62 @@
5156
* @author Vince Bickers
5257
* @author Stephane Nicoll
5358
* @author Kazuki Shimizu
54-
* @author Michael Simons
59+
* @author Michael J. Simons
5560
* @since 1.4.0
5661
*/
5762
@Configuration(proxyBeanMethods = false)
58-
@ConditionalOnClass({ SessionFactory.class, Neo4jTransactionManager.class, PlatformTransactionManager.class })
59-
@EnableConfigurationProperties(Neo4jProperties.class)
60-
@Import(Neo4jBookmarkManagementConfiguration.class)
63+
@ConditionalOnClass({ Driver.class, Neo4jTransactionManager.class, PlatformTransactionManager.class })
64+
@EnableConfigurationProperties(Neo4jDataProperties.class)
65+
@ConditionalOnBean(Driver.class)
66+
@AutoConfigureBefore(TransactionAutoConfiguration.class)
67+
@AutoConfigureAfter(Neo4jAutoConfiguration.class)
68+
@Import(Neo4jDefaultCallbacksRegistrar.class)
6169
public class Neo4jDataAutoConfiguration {
6270

6371
@Bean
64-
@ConditionalOnMissingBean(PlatformTransactionManager.class)
65-
public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory,
66-
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
67-
Neo4jTransactionManager transactionManager = new Neo4jTransactionManager(sessionFactory);
68-
transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(transactionManager));
69-
return transactionManager;
72+
@ConditionalOnMissingBean
73+
public Neo4jConversions neo4jConversions() {
74+
return new Neo4jConversions();
7075
}
7176

72-
@Configuration(proxyBeanMethods = false)
73-
@ConditionalOnMissingBean(SessionFactory.class)
74-
static class Neo4jOgmSessionFactoryConfiguration {
75-
76-
@Bean
77-
@ConditionalOnMissingBean
78-
org.neo4j.ogm.config.Configuration configuration(Neo4jProperties properties) {
79-
return properties.createConfiguration();
80-
}
81-
82-
@Bean
83-
SessionFactory sessionFactory(org.neo4j.ogm.config.Configuration configuration, BeanFactory beanFactory,
84-
ObjectProvider<EventListener> eventListeners) {
85-
SessionFactory sessionFactory = new SessionFactory(configuration, getPackagesToScan(beanFactory));
86-
eventListeners.orderedStream().forEach(sessionFactory::register);
87-
return sessionFactory;
88-
}
89-
90-
private String[] getPackagesToScan(BeanFactory beanFactory) {
91-
List<String> packages = EntityScanPackages.get(beanFactory).getPackageNames();
92-
if (packages.isEmpty() && AutoConfigurationPackages.has(beanFactory)) {
93-
packages = AutoConfigurationPackages.get(beanFactory);
94-
}
95-
return StringUtils.toStringArray(packages);
96-
}
97-
77+
@Bean
78+
@ConditionalOnMissingBean
79+
public Neo4jMappingContext neo4jMappingContext(ApplicationContext applicationContext,
80+
Neo4jConversions neo4jConversions) throws ClassNotFoundException {
81+
Set<Class<?>> initialEntityClasses = new EntityScanner(applicationContext).scan(Node.class);
82+
Neo4jMappingContext context = new Neo4jMappingContext(neo4jConversions);
83+
context.setInitialEntitySet(initialEntityClasses);
84+
return context;
9885
}
9986

100-
@Configuration(proxyBeanMethods = false)
101-
@ConditionalOnWebApplication(type = Type.SERVLET)
102-
@ConditionalOnClass({ WebMvcConfigurer.class, OpenSessionInViewInterceptor.class })
103-
@ConditionalOnMissingBean(OpenSessionInViewInterceptor.class)
104-
@ConditionalOnProperty(prefix = "spring.data.neo4j", name = "open-in-view", havingValue = "true")
105-
static class Neo4jWebConfiguration {
106-
107-
@Bean
108-
OpenSessionInViewInterceptor neo4jOpenSessionInViewInterceptor() {
109-
return new OpenSessionInViewInterceptor();
110-
}
111-
112-
@Bean
113-
WebMvcConfigurer neo4jOpenSessionInViewInterceptorConfigurer(OpenSessionInViewInterceptor interceptor) {
114-
return new WebMvcConfigurer() {
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+
}
11594

116-
@Override
117-
public void addInterceptors(InterceptorRegistry registry) {
118-
registry.addWebRequestInterceptor(interceptor);
119-
}
95+
@Bean(Neo4jRepositoryConfigurationExtension.DEFAULT_NEO4J_CLIENT_BEAN_NAME)
96+
@ConditionalOnMissingBean
97+
public Neo4jClient neo4jClient(Driver driver) {
98+
return Neo4jClient.create(driver);
99+
}
120100

121-
};
122-
}
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+
}
123107

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;
124115
}
125116

126117
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2012-2020 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.autoconfigure.data.neo4j;
18+
19+
import org.springframework.boot.context.properties.ConfigurationProperties;
20+
21+
/**
22+
* Configuration properties for Spring Data Neo4j.
23+
*
24+
* @author Michael J. Simons
25+
* @since 2.4.0
26+
*/
27+
@ConfigurationProperties(prefix = "spring.data.neo4j")
28+
public class Neo4jDataProperties {
29+
30+
/**
31+
* Database name to use. By default, the server decides the default database to use.
32+
*/
33+
private String database;
34+
35+
public String getDatabase() {
36+
return this.database;
37+
}
38+
39+
public void setDatabase(String database) {
40+
this.database = database;
41+
}
42+
43+
}

0 commit comments

Comments
 (0)