有一个使用 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]
└─────┘
任何帮助,将不胜感激。