因此,我想记住对数据库的调用,该调用获得了有效的用户名,而只是从供应商处访问它们,而不是进行昂贵的数据库调用。因此,我试图开设此类课程:
公共类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 $ new $ 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并使所有这些正常工作吗?是什么导致我的供应商出现空值?