Очистка кэша с использованием весеннего графика? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующий код, который реализует простой кеш.

 public Observable<String> getSomethingEveryoneWants(String key) {
    final Map<String, String>localCacheReference = GlobalCache.cache;
    return Observable.create(subscriber -> {
         if(!localCacheReference.containsKey(key)) {
            localCacheReference.put(key, doAHeavyCallToGetValueFor(key));
        } 
        subscriber.onNext(localCacheReference.get(key));
        subscriber.onCompleted();
    }).subscribeOn(Schedulers.io()).map(String.class::cast);

}

Мне также нужна возможность очистить кеш в зависимости от какой-то конфигурации: поэтому я что-то сделал

//By default run every mid night. This should be defined in propFile
@Scheduled(cron = "${corn.cronString:0 0 0 * * *}")
public void clearCache() {
    GlobalCache.cache = new ConcurrentHashMap<>();
}

Видите ли вы что-то не так с этим подходом?Мое приложение запускается нормально и некоторое время работает как положено.Но начинает сбой случайным образом после запуска clearCache около 20-30 раз.Есть ли какие-либо побочные эффекты, которые мне нужно знать?

Обновление: загрузочное приложение Spring.Приложение выдает нулевой указатель При выполнении restTemplate.exchange () после clearCache запускается примерно 20-30 раз.

Если я выключаю / удаляю @Schedule;Я не получаю никаких ошибок restTemplate.exchange () работает как положено.restTemplate.exchange () выполняется независимо от того, работает @Schedule или нет и не зависит от кеша.

Проблема не возникает, если я очищаю кеш любым другим способом, например, проверяю время при чтении кешаи очистка кэша.

Я не могу понять, почему restTemplete терпит неудачу при использовании @Scheduled.

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