Я пытаюсь использовать механизм кэширования при загрузке для кэширования http-ответа, который я получаю.В настоящее время у меня есть http-клиент, который делает мне звонок на отдых.Я хочу, чтобы результат был кэширован.
Поэтому я создал сервис, который добавляет кэшируемый слой:
@Cacheable("logicalTime", sync = true)
open fun getLogicalTimeById(dsId: String, idLogicalTimes: String): LogicalTime {
return logicalTimeResource.getById(dsId, idLogicalTimes)
}
Логический тайм-ресурс является прокси для остальных API.
Фреймворк приложения выглядит следующим образом:
- Шедулер, который вызывается каждую секунду
- перебирает список с записями
Вызывает getLogicalTimeById для каждой записи вСопрограмма:
GlobalScope.launch {
getLogicalTime(element.dsId, element.idLogicalTime
}
Я ожидаю, что кэш ищется для dsId и idLogicalTimes, и когда есть запись для этой пары значений, он возвращается из кеша.В противном случае logicalTimeResource.getById(dsId, idLogicalTimes)
Теперь проблема в том, что logicalTimeResource.getById(dsId, idLogicalTimes)
вызывается для каждого элемента в списке.Да, у меня есть @EnableCaching
на моем Applicaiton.kt
Редактировать:
Я создал небольшой гист, который показывает, что кэш не работает: 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-сервис на localhost.
Edit v2:
Благодаря Стефану Николлу, который указал, что кэширование втот же класс не работает, я обновил суть и переместил все вызовы в класс репо.Это выглядит так: https://gist.github.com/H3npi/af37ea97ea3450deeca2ab8933072c94