Improve check whether to create DataLoaderRegistry

Closes gh-915
This commit is contained in:
rstoyanchev
2024-02-20 07:18:34 +00:00
parent c72415f361
commit 3381774fb9
2 changed files with 11 additions and 3 deletions

View File

@@ -17,7 +17,6 @@ package org.springframework.graphql.execution;
import graphql.ExecutionInput;
import graphql.GraphQLContext;
import org.dataloader.BatchLoaderContextProvider;
import org.dataloader.DataLoaderRegistry;
/**

View File

@@ -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<DataLoaderRegistrar> 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) {