我有一个注释为@Cacheable的方法,Gemfire也配置为缓存。在修复Not Null值时,mehtod工作正常。但如果它返回Null,则Gemfire会抛出异常,如下所示:
Caused by: java.lang.NullPointerException: value must not be null
com.gemstone.gemfire.internal.cache.LocalRegion.newUpdateEntryEvent(LocalRegion.java:1744)
at com.gemstone.gemfire.internal.cache.LocalRegion.put(LocalRegion.java:1705)
at com.gemstone.gemfire.internal.cache.AbstractRegion.put(AbstractRegion.java:286)
at org.springframework.data.gemfire.support.GemfireCache.put(GemfireCache.java:68)
方法如下:
@Override
@Cachable("date_cache")
public String getData(String value){
return myDataRepository.getLabelByValue(value);
}
如果myDataRepository.getLabelByValue(value)为null,则在Gemfire中抛出NullPointerException,并且有一些数据从数据库中退出,然后它可以正常工作。
如果有任何配置忽略Gemfire中的空值缓存,请提供帮助。
答案 0 :(得分:0)
在审核GemFire的源代码时,没有办法(例如GemFire分布式配置系统属性)来避免NPE ......
1744:if(value == null){ 1745:抛出新的NullPointerException(LocalizedStrings 1746:.LocalRegion_VALUE_MUST_NOT_BE_NULL.toLocalizedString()); 1747:}
抱歉,遗憾的是,您的数据存储库必须返回非空值。对于GemFire 8(新版本)来说,情况确实如此。
在短期内,您可以通过扩展Spring Data GemFire的CacheManager。getCache()方法来返回一个包装版本的Cache,它会丢弃put上的空值(key,价值),这是一项额外的工作,或等待JIRA-327。