问题描述
今天在使用guava cache的时候,报了如下错误:
com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader returned null for key 50816009. at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2346) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2316) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2278) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2193) at com.google.common.cache.LocalCache.get(LocalCache.java:3932) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3936) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4806)
之前使用的时候一直都挺正常的,没有出现过此类异常,调用代码如下:
/** 本地缓存 */ private LoadingCache<Long, ServiceInfo> queryByCategoryIdCache = CacheBuilder.newBuilder().refreshAfterWrite(CacheConstants.SERVICE_INFO_CACHE_REFRESH_TIME, TimeUnit.SECONDS) .maximumSize(CacheConstants.MAX_SIZE_PER_CACHE).build(new CacheLoader<Long, ServiceInfo>() { public ServiceInfo load(Long categoryId) { return getServiceInfoByCategoryId(categoryId); } });
@Override public ServiceInfo getServiceInfoByCategoryIdWithCache(long categoryId, boolean withCache) { if (withCache) { try { return queryByCategoryIdCache.get(categoryId); } catch (Throwable t) { logger.error("query serviceInfo exception", t); return null; } } else { return getServiceInfoByCategoryId(categoryId); } }
原因分析
后来又仔细看了下报错信息,大概意思是结果的返回值为null,而guava缓存中又不会存放value为null的数据,导致抛出异常。如果业务流程中,允许存在结果为null的话,只需要捕获到该异常后,返回null就行,可以忽略产生的一次信息。示意代码如下:
@Override public ServiceInfo getServiceInfoByCategoryIdWithCache(long categoryId, boolean withCache) { if (withCache) { try { return queryByCategoryIdCache.get(categoryId); } catch (Throwable t) { return null; } } else { return getServiceInfoByCategoryId(categoryId); } }
相关推荐
com.google.common.annotations com.google.common.base com.google.common.collect com.google.common.io com.google.common.net com.google.common.primitives com.google.common.util.concurrent 源码...
com.google.common.collect.Maps; Maps.newConcurrentMap();
google-collect-1.0-rc1.jar 用于获取Lists.newArrayList
import com.google.common.base.Preconditions 编译Setting 或SystemUI会用到。欢迎下载!!
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] ...
com.google.common google jar包
Files contained in ...com.google.zxing.common.detector.MonochromeRectangleDetector.class com.google.zxing.common.detector.WhiteRectangleDetector.class com.google.zxing.common.reedsolomon.GF256.class ...
解决rocketmq-filter中com.google.common.cache*等缺包问题,包含所有com.google.common类,内含使用说明,解决问题一步到位
动软件生成完之后需要引用的组件。LTP.Accounts.dll,Maticsoft.Common.dll,Maticsoft.DBUtility.dll,DbHelperSQL.cs
com.google.common.collect.Lists的jar包
import com.google.common.base.Preconditions 编译Setting 或SystemUI会用到。
只需放入pulign中替换原来文件就行,然后就可以进行破解,打开软件就可以了
本jar包用于导入Google下所需的部分类和内置文件。本jar包用于导入Google下所需的部分类和内置文件
版本:20.26.13 (000300-319035724) 适用于安卓4.1-4.4范围的armv7a构架操作系统
搞P2P需要的一些包====java的 com.borland.zip com.google.common.all.zip de.javawi.jstun-0.6.1.zip javax.media-com.sun.-net.sf.fmj.jar.zip 收集不易,共享上传给需要的朋友童鞋。。。。
包括各种Microsoft.Practices.EnterpriseLibrary.Common.dll的版本,如Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ContainerModel等
com.google.common.cache:缓存工具包,非常简单易用且功能强大的JVM内缓存。 com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。 ...
主要介绍了启动Azkaban报错:java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMap.toImmutableMap,需要的朋友可以参考下
com.springsource.flex.messaging.common-3.2.0.3978.jar