如何配置Netflix DGS?基于Kotlin DSL与Gradle环境
Netflix DGS 额外配置指南(Kotlin DSL + Gradle)
一、代码生成任务的扩展配置
你已经完成了GenerateJavaTask的基础配置,官方文档中提到的其他代码生成相关参数,直接在任务配置块内添加即可,示例如下:
tasks.withType<com.netflix.graphql.dgs.codegen.gradle.GenerateJavaTask> { schemaPaths = mutableListOf("$projectDir/src/main/resources/schema") packageName = "envoy.roomba.netflix.dgs.generated" // 生成GraphQL客户端代码 generateClient = true // 自动生成数据获取器的绑定代码(减少手动注解) generateDataFetchingWiring = true // 只生成指定查询的代码 includeQueries = listOf("GetRoombaStatus") // 排除不需要生成的类型 excludeTypes = listOf("InternalLog") // 自定义标量类型映射 typeMapping = mapOf("DateTime" to "java.time.OffsetDateTime") // 生成接口而非实体类 generateInterfaces = true }
二、应用运行时配置
DGS的运行时配置属于Spring Boot应用层面,无需修改Gradle脚本,直接在src/main/resources/application.yml(或.properties)中配置,对应官方文档的运行时参数:
YAML格式示例
dgs: graphql: # 自定义Schema扫描路径 schema-locations: classpath*:schema/**/*.graphqls # 开启GraphQL自省功能 introspection: true # 启用Playground调试界面 playground: enabled: true # 扩展标量绑定 extensions: scalars: DateTime: java.time.OffsetDateTime # 配置数据加载器的批处理阈值 data-loader: batch-loader-threshold: 10
Properties格式示例
dgs.graphql.schema-locations=classpath*:schema/**/*.graphqls dgs.graphql.introspection=true dgs.graphql.playground.enabled=true dgs.data-loader.batch-loader-threshold=10
三、扩展DGS自动配置
如果需要覆盖默认的DGS Bean实现,创建标注@DgsAutoConfiguration的配置类即可,DGS会自动扫描并应用该配置:
import com.netflix.graphql.dgs.autoconfig.DgsAutoConfiguration import graphql.execution.DataFetcherExceptionHandler import graphql.execution.DataFetcherExceptionHandlerResult import org.springframework.context.annotation.Bean @DgsAutoConfiguration class CustomDgsConfiguration { // 自定义异常处理器 @Bean fun customExceptionHandler(): DataFetcherExceptionHandler { return DataFetcherExceptionHandler { env -> val customError = graphql.GraphQLError.newError() .message("处理请求时出错:${env.exception.message}") .location(env.sourceLocation) .build() DataFetcherExceptionHandlerResult.newResult() .error(customError) .build() } } }
常见问题说明
- 不要将DGS运行时配置放在
gradle.properties中,该文件仅用于Gradle构建阶段的参数,运行时配置需放在Spring Boot的应用配置文件里。 - 代码生成任务的所有配置必须在
tasks.withType<GenerateJavaTask>块内定义,确保配置作用到正确的代码生成任务上。
内容的提问来源于stack exchange,提问作者Willy Xiao
相关产品推荐
相关产品推荐

