Я определил собственный инструментарий GraphQL, используя graphql-java-kickstart/graphql-spring-boot
(https://github.com/graphql-java-kickstart/graphql-spring-boot), который переопределяет метод instrumentExecutionContext для предоставления настраиваемого предварительного выполнения ExecutionContext.
class ExecutionContextInstrumentation extends SimpleInstrumentation {
@Override
public ExecutionContext instrumentExecutionContext(ExecutionContext executionContext, InstrumentationExecutionParameters parameters) {
...
return myExecutionContext;
}
}
@Service
class InstrumentationService {
@Bean
List<Instrumentation> instrumentations() {
return new ArrayList<>(List.of(new ExecutionContextInstrumentation());
}
}
Это работает отлично подходит при выполнении GraphQL запросов и мутаций . Однако этот метод не вызывается, когда я выполняю подписку . Это работает для подписок, хотя, если я выполняю свой код вне контекста Spring, например, в обычном тесте JUnit. Так что, похоже, это не ошибка в graphql- java, а в graphql-java-kickstart
, которая не принимает мой инструментарий для подписок.
Итак, чтобы было понятно: этот простой graphql- * Код 1024 * отлично работает и для подписок.
graphQL = GraphQL.newGraphQL(schema)
.instrumentation(new ExecutionContextInstrumentation())
.build();
Но в контексте graphql-spring-boot
у меня нет возможности явно установить инструментарий. Я должен определить bean-компонент типа List<Instrumentation>
, который возвращает контрольно-измерительные приборы. Каркас тогда заботится о проводке.