CacheLoader.loadAll не вызывается, когда LoadingCache.getAll - PullRequest
0 голосов
/ 12 апреля 2019

Использование guava CacheLoader для массового поиска должно вызывать CacheLoader.loadAll, когда этот метод переопределяется в классе CacheLoader и когда он явно вызывается: getAll(Iterable<? extends K>), но это не работает, loadAll никогда не вызывается.

Как мне сделать LoadingCache.getAll() для неявного вызова CacheLoader.loadAll? в документации указано, что оно должно: https://github.com/google/guava/wiki/CachesExplained

Это мой подход:

private static LoadingCache<String, Person> inProgressPersons;

public Map<String, Person> getAllPersons(List<String> ids){
return inProgressPersons.getAll(ids); // This should implicit call PersonsCacheLoader.loadAll but is not working.
}

public class PersonsCacheLoader extends CacheLoader<String, Person> {

  @Override
  public Person load(String id) throws Exception {
    return // logic to get one person by id;
  }

  @Override
  public Map<String, Person> loadAll(Iterable<? extends String> ids) {
   return // logic to get all persons.
   // This is the mehtod is not being executed by guava CacheLoader.
}

Для инициализации кэша, который я делаю:

 inProgressPersonsCache = CacheBuilder.newBuilder()
   .expireAfterWrite(15, TimeUnit.SECONDS)
   .build(new PersonsCacheLoader());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...