Graphql Java Data Loader不返回缓存的值

问题描述

我正在研究spring-boot-webflux,graphql-java,kotlin,mongodb项目。

随着我的应用程序的发展,graphql的N + 1问题已经解决了。

所以我试图使用数据加载器来解决N + 1问题。

但是数据加载器没有返回缓存的值。

我的graphql:

curriculum: [courses]

我的数据库

[
  { curriculum1: {courseIds: [1,2,3,4]}},{ curriculum2: {courseIds: [2,4,5]}}
]

使用数据加载器时,我的期望值为

[
  { curriculum1: {courses: [{course1},{course2},{course3},{course4}]}},{ curriculum1: {courses: [{course2},{course4},{course5}]}},]

但是结果是

[
  { curriculum1: {courses: [{course1},{ curriculum2: {courses: [{course5}]}}
]

当我禁用缓存时,结果就是我期望的。

可能是什么问题?

val courseBatchLoader: BatchLoader<ObjectId,Course> = BatchLoader { courseIds ->
    courseRepository.findByIds(courseIds).collectList().toFuture()
}

val courseDataLoader: DataLoader<ObjectId,Course> = DataLoader.newDataLoader(courseBatchLoader)

我的DataFetching函数

fun tempCourses(): DataFetcher<CompletableFuture<List<Course>>> = DataFetcher {
    val curriculum = it.getSource<Curriculum>()!!
    val courseIds = curriculum.courseIds
    val DataLoader = it.getDataLoader<ObjectId,Course>("course")

    DataLoader.loadMany(courseIds)
    DataLoader.dispatch()
}

我的数据加载统计信息显示缓存命中成功。

"course": {
          "loadCount": 54,"loadErrorCount": 0,"loadErrorRatio": 0.0,"batchInvokeCount": 6,"batchLoadCount": 21,"batchLoadratio": 0.3888888888888889,"batchLoadExceptionCount": 1,"batchLoadExceptionRatio": 0.018518518518518517,"cacheHitCount": 33,"cacheHitRatio": 0.6111111111111112
        }

当我检查数据库查询数量时,这就是我所期望的。(= 21,与batchLoadCount相同)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)