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.
的代理
应用程序框架如下所示:
- 每秒调用的调度器
- 遍历包含条目的列表
为协程中的每个条目调用 getLogicalTimeById:
GlobalScope.launch {
getLogicalTime(element.dsId, element.idLogicalTime
}
我希望在缓存中查找 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
问题是:我的组件没有自动装配。自动装配解决了这个问题。
我正在尝试使用 spring-boot 缓存机制来缓存我得到的 http 响应。目前我有一个 http 客户端 休息叫我。我想要缓存结果。
所以我创建了一个添加可缓存层的服务:
@Cacheable("logicalTime", sync = true)
open fun getLogicalTimeById(dsId: String, idLogicalTimes: String): LogicalTime {
return logicalTimeResource.getById(dsId, idLogicalTimes)
}
logicalTimeResource 是其余 api.
的代理应用程序框架如下所示:
- 每秒调用的调度器
- 遍历包含条目的列表
为协程中的每个条目调用 getLogicalTimeById:
GlobalScope.launch { getLogicalTime(element.dsId, element.idLogicalTime }
我希望在缓存中查找 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
问题是:我的组件没有自动装配。自动装配解决了这个问题。