Spring boot cache evict не работает из другого потока - PullRequest
0 голосов
/ 06 апреля 2020

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

1 Ответ

0 голосов
/ 06 апреля 2020

Похоже, что методы updateToken() и evictApplicationTokenCache() находятся в одном классе.

В этом случае аннотация @CacheEvict будет игнорироваться, поскольку обработка кэша осуществляется перехватчиками, которые являются только участвует, когда вы вызываете метод из одного компонента в другой (внедренный) компонент.

Если это так, вы можете переместить метод evictApplicationTokenCache() в помощник @Component или поместить аннотацию @CacheEvict по методу updateToken().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...