尝试将com.google.common.base.Supplier与JPA配合使用,供应商上的空指针

时间:2018-06-26 19:35:09

标签: jpa caching supplier

因此,我想记住对数据库的调用,该调用获得了有效的用户名,而只是从供应商处访问它们,而不是进行昂贵的数据库调用。因此,我试图开设此类课程:

公共类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并使所有这些正常工作吗?是什么导致我的供应商出现空值?

0 个答案:

没有答案