Попытка использовать com.google.common.base.Supplier с JPA, нулевой указатель на поставщика
Поэтому я хочу запомнить вызов в БД, который получает действительные имена пользователей, и просто обращаться к ним от поставщика, вместо того, чтобы делать дорогие вызовы в БД. Таким образом я попытался сделать этот класс:
открытый класс UserNameSupplier {
@Autowired
private UserRepository repo;
private final Supplier<Set<String>> userNamesSupplier;
public UserNameSupplier(){
userNamesSupplier = Suppliers.memoizeWithExpiration(()
-> Lists.newArrayList(repo.findAll()).stream().map(LocUser::getUserName).collect(Collectors.toSet()),
10, TimeUnit.MINUTES);
}
public Set<String> getValidUserNames(){
return userNamesSupplier.get();
}
}
Запуск теста для этого (попытка вызвать getValidUserNames) получает этот стек вызовов.
java.lang.NullPointerException
com.company.boot.domain.middlemen.UserNameSupplier.lambda $ новый $ 0 (UserNameSupplier.java:30)
com.google.common.base.Suppliers $ ExpiringMemoizingSupplier.get (Suppliers.java:227)
com.company.application.domain.middlemen.UserNameSupplier.getValidUserNames (UserNameSupplier.java:39)
com.company.application.impl.ServiceImpl.getInformation (ServiceImpl.java:34)
com.company.application.impl.applicationServiceImplTest.testUserRepository (ServiceImplTest.java:79)
Репозиторий расширяет CrudRepository, поэтому я должен иметь возможность вызывать findAll и все это работает правильно? Что заставляет моего поставщика выйти из нуля?