0

有一个使用 netflix-dgs 的 Spring Boot 应用程序。我正在使用一些自定义指令,需要解析模式以获取这些指令。目前我正在根据使用请求执行此操作DgsDataFetchingEnvironment.getGraphQLSchema()

这确实效率低下,我想GraphQLSchema在服务器启动时访问该对象,以便我可以一次解析这些指令并为每个请求重新使用它。

DGS 中的类DgsAutoConfiguration创建了一个 bean,GraphQLSchema但添加它会导致我的 datafetcher 和DgsAutoConfiguration.

当前低效的代码:

@DgsComponent
public class EntityDataFetcher {
.
.
.
@DgsQuery(
            field = DgsConstants.QUERY.QueryEntities
    )
    public ChangeConnection fetchEntities(@InputArgument List<String> entityId,
                                         final DgsDataFetchingEnvironment dfe) {

        var directives = schemaParser.getDirectives(dfe.getGraphQLSchema());
        return service.getEntities(entityId, directives);
    }
}

添加部门:

@DgsComponent
public class EntityDataFetcher {
   .
   .
   .

    @Autowired
    public QueryChangesDataFetcher(EntityService service, SchemaParser schemaParser ) {
        this.service = service;
        this.schemaParser = schemaParser;
    }

    @DgsQuery(
            field = DgsConstants.QUERY.QueryEntities
    )
    public ChangeConnection fetchEntities(@InputArgument List<String> entityId,
                                         final DgsDataFetchingEnvironment dfe) {

        var directives = schemaParser.getDirectives();
        return service.getEntities(entityId, directives);
    }
}

@Component
public class SchemaParser{

    @Autowired
    public SchemaParser(GraphQLSchema schema){
        this.schema = schema;
        someParsinglogic();

    }
    ...

}

我得到的错误:

┌─────┐
|  entityDataFetcher defined in file [.../graphql/EntityDataFetcher.class]
↑     ↓
|  schemaParser defined in file [.../util/SchemaParser.class]
↑     ↓
|  schema defined in class path resource [com/netflix/graphql/dgs/autoconfig/DgsAutoConfiguration.class]
└─────┘

任何帮助,将不胜感激。

4

0 回答 0