Использование 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());