From 36a84f58bd469aca9bd7a0eb0e246bd12ae756a7 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 24 Nov 2021 16:18:40 +0100 Subject: [PATCH] Auto-configure DataLoaderRegistrar components This commit configures all `DataLoaderRegistrar` application components with the `GraphQlService`. This allows applications to contribute `DataLoader` instances without using the annotated-controller programming model. Closes gh-189 --- .../boot/GraphQlServiceAutoConfiguration.java | 13 ++++++------ .../graphql/boot/test/GraphQlTest.java | 1 + .../boot/test/GraphQlTypeExcludeFilter.java | 2 ++ .../GraphQlServiceAutoConfigurationTests.java | 20 +++++++++++++++++++ .../test/GraphQlTypeExcludeFilterTests.java | 15 ++++++++++++++ .../src/docs/asciidoc/boot-starter.adoc | 5 +++++ 6 files changed, 49 insertions(+), 7 deletions(-) diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlServiceAutoConfiguration.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlServiceAutoConfiguration.java index 82dcdde9..6390d619 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlServiceAutoConfiguration.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/GraphQlServiceAutoConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.graphql.boot; import graphql.GraphQL; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -28,14 +29,14 @@ import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.graphql.GraphQlService; import org.springframework.graphql.data.method.annotation.support.AnnotatedControllerConfigurer; import org.springframework.graphql.execution.BatchLoaderRegistry; +import org.springframework.graphql.execution.DataLoaderRegistrar; import org.springframework.graphql.execution.DefaultBatchLoaderRegistry; import org.springframework.graphql.execution.ExecutionGraphQlService; import org.springframework.graphql.execution.GraphQlSource; -import org.springframework.graphql.web.WebGraphQlHandler; /** * {@link EnableAutoConfiguration Auto-configuration} for creating a - * {@link WebGraphQlHandler}. + * {@link GraphQlService}. * * @author Brian Clozel * @since 1.0.0 @@ -45,19 +46,17 @@ import org.springframework.graphql.web.WebGraphQlHandler; @AutoConfigureAfter(GraphQlAutoConfiguration.class) public class GraphQlServiceAutoConfiguration { - private final BatchLoaderRegistry batchLoaderRegistry = new DefaultBatchLoaderRegistry(); - @Bean @ConditionalOnMissingBean public BatchLoaderRegistry batchLoaderRegistry() { - return this.batchLoaderRegistry; + return new DefaultBatchLoaderRegistry(); } @Bean @ConditionalOnMissingBean - public GraphQlService graphQlService(GraphQlSource graphQlSource) { + public GraphQlService graphQlService(GraphQlSource graphQlSource, ObjectProvider dataLoaderRegistrars) { ExecutionGraphQlService service = new ExecutionGraphQlService(graphQlSource); - service.addDataLoaderRegistrar(this.batchLoaderRegistry); + dataLoaderRegistrars.forEach(service::addDataLoaderRegistrar); return service; } diff --git a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/test/GraphQlTest.java b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/test/GraphQlTest.java index b699f734..13b21339 100644 --- a/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/test/GraphQlTest.java +++ b/graphql-spring-boot-starter/src/main/java/org/springframework/graphql/boot/test/GraphQlTest.java @@ -49,6 +49,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; *