如果我所有的数据提取程序直接返回POJO而不是CompletableFuture,那么整个GraphQL执行是否会在同一线程上发生?
答案 0 :(得分:0)
是的。根据我从源代码中看到的内容,如果所有数据获取程序仅返回POJO,则整个执行将在同一线程上执行。
要配置数据获取程序以并行运行,必须使用支持异步处理的ExecutionStrategy
。查询(AsyncExecutionStrategy
)使用的默认值支持,而突变(AsyncSerialExecutionStrategy
)不支持。
数据提取程序还必须使用CompletableFuture
返回一个CompletableFuture.supplyAsync()
。请注意,graphql-java
提供了一个方便的数据提取器,称为AsyncDataFetcher
,它可以将普通的同步数据提取器包装到异步的数据提取器中:
DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);