From 3381774fb9146494b1f311b8f1c0c5788cd2ca77 Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Tue, 20 Feb 2024 07:18:34 +0000 Subject: [PATCH] Improve check whether to create DataLoaderRegistry Closes gh-915 --- .../graphql/execution/DataLoaderRegistrar.java | 1 - .../execution/DefaultExecutionGraphQlService.java | 13 +++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/DataLoaderRegistrar.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/DataLoaderRegistrar.java index bbeed39c..fae2ed82 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/DataLoaderRegistrar.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/DataLoaderRegistrar.java @@ -17,7 +17,6 @@ package org.springframework.graphql.execution; import graphql.ExecutionInput; import graphql.GraphQLContext; -import org.dataloader.BatchLoaderContextProvider; import org.dataloader.DataLoaderRegistry; /** diff --git a/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java b/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java index 267e3db8..f0c83065 100644 --- a/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java +++ b/spring-graphql/src/main/java/org/springframework/graphql/execution/DefaultExecutionGraphQlService.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 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. @@ -51,6 +51,8 @@ public class DefaultExecutionGraphQlService implements ExecutionGraphQlService { private final List dataLoaderRegistrars = new ArrayList<>(); + private boolean hasDataLoaderRegistrations; + private final boolean isDefaultExecutionIdProvider; @@ -68,6 +70,13 @@ public class DefaultExecutionGraphQlService implements ExecutionGraphQlService { */ public void addDataLoaderRegistrar(DataLoaderRegistrar registrar) { this.dataLoaderRegistrars.add(registrar); + this.hasDataLoaderRegistrations = (this.hasDataLoaderRegistrations || hasRegistrations(registrar)); + } + + private static boolean hasRegistrations(DataLoaderRegistrar registrar) { + DataLoaderRegistry registry = DataLoaderRegistry.newRegistry().build(); + registrar.registerDataLoaders(registry, GraphQLContext.newContext().build()); + return !registry.getDataLoaders().isEmpty(); } @@ -87,7 +96,7 @@ public class DefaultExecutionGraphQlService implements ExecutionGraphQlService { } private ExecutionInput registerDataLoaders(ExecutionInput executionInput) { - if (!this.dataLoaderRegistrars.isEmpty()) { + if (this.hasDataLoaderRegistrations) { GraphQLContext graphQLContext = executionInput.getGraphQLContext(); DataLoaderRegistry existingRegistry = executionInput.getDataLoaderRegistry(); if (existingRegistry == DataLoaderDispatcherInstrumentationState.EMPTY_DATALOADER_REGISTRY) {