@@ -52,6 +52,8 @@ public class DefaultExecutionGraphQlService implements ExecutionGraphQlService {
5252
5353 private final List <DataLoaderRegistrar > dataLoaderRegistrars = new ArrayList <>();
5454
55+ private boolean hasDataLoaderRegistrations ;
56+
5557 private final boolean isDefaultExecutionIdProvider ;
5658
5759
@@ -69,6 +71,13 @@ public DefaultExecutionGraphQlService(GraphQlSource graphQlSource) {
6971 */
7072 public void addDataLoaderRegistrar (DataLoaderRegistrar registrar ) {
7173 this .dataLoaderRegistrars .add (registrar );
74+ this .hasDataLoaderRegistrations = (this .hasDataLoaderRegistrations || hasRegistrations (registrar ));
75+ }
76+
77+ private static boolean hasRegistrations (DataLoaderRegistrar registrar ) {
78+ DataLoaderRegistry registry = DataLoaderRegistry .newRegistry ().build ();
79+ registrar .registerDataLoaders (registry , GraphQLContext .newContext ().build ());
80+ return !registry .getDataLoaders ().isEmpty ();
7281 }
7382
7483
@@ -78,26 +87,30 @@ public final Mono<ExecutionGraphQlResponse> execute(ExecutionGraphQlRequest requ
7887 if (!this .isDefaultExecutionIdProvider && request .getExecutionId () == null ) {
7988 request .configureExecutionInput (RESET_EXECUTION_ID_CONFIGURER );
8089 }
90+
8191 ExecutionInput executionInput = request .toExecutionInput ();
92+
93+ GraphQLContext graphQLContext = executionInput .getGraphQLContext ();
8294 snapshotFactory .captureFrom (contextView ).updateContext (executionInput .getGraphQLContext ());
83- ExecutionInput updatedExecutionInput = registerDataLoaders (executionInput );
95+
96+ ExecutionInput updatedExecutionInput =
97+ (this .hasDataLoaderRegistrations ? registerDataLoaders (executionInput ) : executionInput );
98+
8499 return Mono .fromFuture (this .graphQlSource .graphQl ().executeAsync (updatedExecutionInput ))
85100 .map (result -> new DefaultExecutionGraphQlResponse (updatedExecutionInput , result ));
86101 });
87102 }
88103
89104 private ExecutionInput registerDataLoaders (ExecutionInput executionInput ) {
90- if (!this .dataLoaderRegistrars .isEmpty ()) {
91- GraphQLContext graphQLContext = executionInput .getGraphQLContext ();
92- DataLoaderRegistry existingRegistry = executionInput .getDataLoaderRegistry ();
93- if (existingRegistry == DataLoaderDispatcherInstrumentationState .EMPTY_DATALOADER_REGISTRY ) {
94- DataLoaderRegistry newRegistry = DataLoaderRegistry .newRegistry ().build ();
95- applyDataLoaderRegistrars (newRegistry , graphQLContext );
96- executionInput = executionInput .transform (builder -> builder .dataLoaderRegistry (newRegistry ));
97- }
98- else {
99- applyDataLoaderRegistrars (existingRegistry , graphQLContext );
100- }
105+ GraphQLContext graphQLContext = executionInput .getGraphQLContext ();
106+ DataLoaderRegistry existingRegistry = executionInput .getDataLoaderRegistry ();
107+ if (existingRegistry == DataLoaderDispatcherInstrumentationState .EMPTY_DATALOADER_REGISTRY ) {
108+ DataLoaderRegistry newRegistry = DataLoaderRegistry .newRegistry ().build ();
109+ applyDataLoaderRegistrars (newRegistry , graphQLContext );
110+ executionInput = executionInput .transform (builder -> builder .dataLoaderRegistry (newRegistry ));
111+ }
112+ else {
113+ applyDataLoaderRegistrars (existingRegistry , graphQLContext );
101114 }
102115 return executionInput ;
103116 }
0 commit comments