Я пытаюсь добавить расписание в метод получения остатка. Планировщик отлично работает, когда я использую его без аннотации @Cacheable. Вот так -
@Scheduled(fixedDelay = 1000*5)
@GetMapping("test")
public void test(){
System.out.println("scheduled task through spring");
}
Проблема в том, что когда я добавляю аннотацию @Cacheable, запрос загружается один раз, а затем планировщик не повторяется.
@Scheduled(fixedDelay = 1000*5)
@Cacheable("testData")
@GetMapping("test")
public void test(){
System.out.println("scheduled task through spring");
}
Я погуглил, но я могу найти информацию о @CacheEvict только с @Scheduled
Реальный метод вызывается из базы данных, я хочу хранить информацию в кеше и обновлять кеш каждые x раз.
Этот метод не будет обновлять кеш. Сам Cacheable не обновляет никаких данных. Метод с аннотацией Cacheable каждый раз будет пытаться брать элементы из кеша. Если вы хотите обновить кеш, вам следует использовать планирование с фиксированной задержкой для метода CacheEvict или CachePut ИЛИ настроить управление кешем, чтобы записи удерживались в течение максимального количества времени X.
Ок, отлично! Я попробую. Большое спасибо




Я не считаю, что ставить @Cacheable метод void имеет смысл. Даже если метод возвращал значение...
Я считаю, что @Scheduled срабатывает, но @Cacheable вызывает возврат кэшированного значения вместо повторного выполнения метода. Я думаю, это имеет смысл.
Включите ведение журнала DEBUG для проверки.
Удачи!
Метод, который я использую, возвращает значение, это было просто для того, чтобы показать, с чем я работаю и чего пытаюсь достичь.
Какова ваша цель в этом? Было бы разумнее поместить @Cacheable в метод, который будет вызывать ваш контроллер (метод класса обслуживания).