Spring Boot Kotlin Coroutine Кэширование Http-вызовов - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать механизм кэширования при загрузке для кэширования 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

1 Ответ

0 голосов
/ 22 ноября 2018

Проблема заключалась в том, что мой компонент не был подключен автоматически.Автопроводка исправила проблему.

...