From 9bcf32afe719f48eed31d43db0b525934ac37e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Fri, 18 Apr 2025 15:43:55 +0200 Subject: [PATCH] Stop assuming that Neo4jDataAutConfiguration ran This commit updates the conditions in Neo4jReactiveDataAutoConfiguration so that it gracefully backs off if certain beans are not present, rather than assuming its sibling Neo4jDataAutoConfiguration has run. Closes gh-44930 --- .../data/neo4j/Neo4jReactiveDataAutoConfiguration.java | 5 ++++- .../neo4j/Neo4jReactiveDataAutoConfigurationTests.java | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfiguration.java index e8b7d4f9ed..ff87b47d6f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.data.neo4j.core.ReactiveDatabaseSelectionProvider; import org.springframework.data.neo4j.core.ReactiveNeo4jClient; @@ -44,6 +45,7 @@ import org.springframework.transaction.ReactiveTransactionManager; @AutoConfiguration(after = Neo4jDataAutoConfiguration.class) @ConditionalOnClass({ Driver.class, ReactiveNeo4jTemplate.class, ReactiveTransactionManager.class, Flux.class }) @ConditionalOnBean(Driver.class) +@EnableConfigurationProperties(Neo4jDataProperties.class) public class Neo4jReactiveDataAutoConfiguration { @Bean @@ -63,6 +65,7 @@ public class Neo4jReactiveDataAutoConfiguration { @Bean(ReactiveNeo4jRepositoryConfigurationExtension.DEFAULT_NEO4J_TEMPLATE_BEAN_NAME) @ConditionalOnMissingBean(ReactiveNeo4jOperations.class) + @ConditionalOnBean(Neo4jMappingContext.class) public ReactiveNeo4jTemplate reactiveNeo4jTemplate(ReactiveNeo4jClient neo4jClient, Neo4jMappingContext neo4jMappingContext) { return new ReactiveNeo4jTemplate(neo4jClient, neo4jMappingContext); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfigurationTests.java index 60c316c31c..d13d0799e6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jReactiveDataAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,6 +56,14 @@ class Neo4jReactiveDataAutoConfigurationTests { .withConfiguration(AutoConfigurations.of(Neo4jAutoConfiguration.class, Neo4jDataAutoConfiguration.class, Neo4jReactiveDataAutoConfiguration.class)); + @Test + void shouldBackOffIfNoMappingContextIsProvided() { + new ApplicationContextRunner().withUserConfiguration(MockedDriverConfiguration.class) + .withConfiguration( + AutoConfigurations.of(Neo4jAutoConfiguration.class, Neo4jReactiveDataAutoConfiguration.class)) + .run((context) -> assertThat(context).doesNotHaveBean(Neo4jMappingContext.class)); + } + @Test void shouldProvideDefaultDatabaseNameProvider() { this.contextRunner.run((context) -> {