Я не могу понять, почему cache evict
не работает в моем сценарии. У меня есть приложение, в котором есть запланированная служба и для пользователя MVC можно щелкнуть некоторые вещи.
@Cacheable(value = "applicationToken")
public Optional<String> getToken() {
return settingsRepository.getToken();
}
@CacheEvict(value = "applicationToken", allEntries = true)
public void evictApplicationTokenCache() {
log.info("Evicting token cache.");
}
public void updateToken(String token) {
log.info("Updating token.");
settingsRepository.updateToken(token);
evictApplicationTokenCache();
}
Метод getToken()
вызывается внутри запланированной службы, и когда я пытался выполнить какой-либо тест для выселить кеш оттуда все заработало. Однако на стороне MVC, если пользователь обновляет токен, вызывается метод updateToken()
, и, хотя он входит в evictApplicationTokenCache()
, при следующем извлечении токена я все равно получаю тот же токен, и он не Не вступайте в метод getToken()
, чтобы фактически получить токен из репозитория.
Единственное обнаруженное мной отношение состоит в том, что потоки отличаются для вызова MVN и для запланированного вызова. Из того, что я знаю, кеш должен жить на уровне контекста, а не на уровне потока. Следовательно, не должно иметь значения, какой поток запрашивает удаление кэша.