Gemfire为@Cachable方法抛出空指针Null结果

时间:2014-09-11 23:43:26

标签: java java-ee spring-data gemfire spring-data-gemfire

我有一个注释为@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中的空值缓存,请提供帮助。

1 个答案:

答案 0 :(得分:0)

在审核GemFire的源代码时,没有办法(例如GemFire分布式配置系统属性)来避免NPE ......

1744:if(value == null){ 1745:抛出新的NullPointerException(LocalizedStrings 1746:.LocalRegion_VALUE_MUST_NOT_BE_NULL.toLocalizedString()); 1747:}

抱歉,遗憾的是,您的数据存储库必须返回非空值。对于GemFire 8(新版本)来说,情况确实如此。

在短期内,您可以通过扩展Sp​​ring Data GemFire的CacheManager。getCache()方法来返回一个包装版本的Cache,它会丢弃put上的空值(key,价值),这是一项额外的工作,或等待JIRA-327

相关问题