Если вы хотите использовать решение Spring Boot, я бы предложил Spring Cache https://spring.io/guides/gs/caching/
Добавить зависимость Maven <artifactId>spring-boot-starter-cache</artifactId>
, включить кэширование в классе приложения SpringBoot с помощью @EnableCaching
, затем определите, какие методы должны кэшировать результат.
Этот метод будет попадать в БД только во время первого вызова, все другие вызовы опираются на кэшированное значение.
@Cacheable("records")
public Record getByName(String name) {
return getRecordRepository().findByName(name);
}
При использовании Spring нативный (в памяти) кеш, вам нужно в какой-то момент выселить объекты, чтобы убедиться, что вы не храните устаревшие данные (если только это не объект readOnly, который никогда не изменяется, вероятно, не очень распространенный вариант использования).
В вашем сценарии (если я правильно понимаю) у вас может быть поток, затем каждые х секунд проверяйте БД, и, если он исправен, вы можете удалить кэш с помощью специального метода:
@CacheEvict(allEntries = true, cacheNames = { "records"})
public void evictAllRecords() {
// evict all records every 10 minutes
}