У нас есть высокопроизводительное промежуточное программное обеспечение Java (J2SE), в котором задержка имеет первостепенное значение. Он использует некоторые постоянные данные, хранящиеся в устаревшей базе данных, где устаревшее приложение может время от времени изменять данные. Из-за требований к задержке мы планируем кэшировать постоянные данные, используя JPA с Hibernate и, возможно, поставщика кеша, например Ehcache.
Однако, когда постоянные данные обновляются (устаревшим приложением), мы должны быть уведомлены об этом как можно скорее. Я думал установить истечение срока действия кеша, но тогда кеш не будет обновляться до тех пор, пока приложение не сделает следующий запрос данных - в этот момент задержка будет вызвана повторным чтением базы данных.
В идеале нам нужно, чтобы кеш возвращал устаревшее значение, и в фоновом режиме кеш обновляется / обновляется с использованием последнего значения из базы данных через регулярные промежутки времени.
Возможно ли это с Ehcache? Я видел SelfPopulatingCache и CacheLoader, но похоже, что я делаю много работы (мне пришлось бы вручную писать код для каждого объекта). Кроме того, есть ли у кого-нибудь пример реализации CacheLoader? Я надеялся на возможность асинхронного обновления в Query Cache.
Существуют ли какие-либо другие технологии, которые могли бы предоставить решение? Мы не связаны провайдером JPA или провайдером кеша.
Может ли Spring @Cacheable предоставить решение? Я видел spring ehcache cachable упоминает самозаполняющийся-cache-scope, но мне не ясно, что это означает.
Заранее спасибо.