Spring 启动 Kotlin 协程缓存 Http 调用

Spring Boot Kotlin Coroutine Caching of Http Calls

我正在尝试使用 spring-boot 缓存机制来缓存我得到的 http 响应。目前我有一个 http 客户端 休息叫我。我想要缓存结果。

所以我创建了一个添加可缓存层的服务:

@Cacheable("logicalTime", sync = true)
open fun getLogicalTimeById(dsId: String, idLogicalTimes: String): LogicalTime {
    return logicalTimeResource.getById(dsId, idLogicalTimes)
}

logicalTimeResource 是其余 api.

的代理

应用程序框架如下所示:

我希望在缓存中查找 dsId 和 idLogicalTimes,当存在这对值的条目时,它会从缓存中返回。否则 logicalTimeResource.getById(dsId, idLogicalTimes)

现在的问题是为列表中的每个元素调用 logicalTimeResource.getById(dsId, idLogicalTimes)。 是的,我的 Applicaiton.kt

@EnableCaching

编辑:

我创建了一个小要点,显示缓存不工作: https://gist.github.com/H3npi/799df85d4570e3cbe8b02ede24bea5a8

主应用程序如下所示:

package com.example.cachetest

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.cache.annotation.EnableCaching

@SpringBootApplication
@EnableCaching
class CachetestApplication

fun main(args: Array<String>) {
    runApplication<CachetestApplication>(*args)
}

我看到两个请求都命中了我在本地主机上的 api 服务。

编辑 v2:

感谢 Stephane Nicoll 指出缓存在同一个 class 中不起作用,我更新了要点并将所有调用移至存储库 class。这看起来像这样:https://gist.github.com/H3npi/af37ea97ea3450deeca2ab8933072c94

问题是:我的组件没有自动装配。自动装配解决了这个问题。