Java Gemfire为@Cacable方法引发空指针空结果
我有一个注释为@Cacheable的方法,Gemfire也配置为缓存。该方法在返回非空值时工作良好。但如果返回Null,则Gemfire抛出异常,如下所示:Java Gemfire为@Cacable方法引发空指针空结果,java,jakarta-ee,spring-data,gemfire,spring-data-gemfire,Java,Jakarta Ee,Spring Data,Gemfire,Spring Data Gemfire,我有一个注释为@Cacheable的方法,Gemfire也配置为缓存。该方法在返回非空值时工作良好。但如果返回Null,则Gemfire抛出异常,如下所示: 原因:java.lang.NullPointerException:值不能为null gemstone.gemfire.internal.cache.LocalRegion.newUpdateEntryEvent(LocalRegion.java:1744) 位于com.gemstone.gemfire.internal.cache.Lo
原因:java.lang.NullPointerException:值不能为null
gemstone.gemfire.internal.cache.LocalRegion.newUpdateEntryEvent(LocalRegion.java:1744)
位于com.gemstone.gemfire.internal.cache.LocalRegion.put(LocalRegion.java:1705)
位于com.gemstone.gemfire.internal.cache.AbstractRegion.put(AbstractRegion.java:286)
位于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中存在任何忽略空值缓存的配置,请提供帮助。在查看Gemfire的源代码时,没有任何方法(例如Gemfire分布式配置系统属性)可以避免NPE 1744:if(值==null){ 1745:抛出新的NullPointerException(LocalizedStrings 1746:.LocalRegion_值_不能为空。toLocalizedString()); 1747:} 很抱歉,很遗憾,您的数据存储库必须返回非空值。这甚至适用于GemFire8(新版本)
短期内,您可以通过扩展Spring Data GemFire的.getCache()方法来绕过此限制,以返回一个包装版本,该版本在put(key,value)时丢弃空值,这是一项额外的工作,或者等待。我已经完成了SGF-327,而避免GemFire对缓存区域中的空值进行限制的改进将是SDG 1.4.5、1.5.1和下一版本(1.6或2.0)的一部分,有待决定。