开发者社区> 问答> 正文

Ehcache使用配置+硬编码实现缓存遇到的问题 配置报错 

目前使用jfinal+Ehcache来开发应用,但是遇到了一个缓存问题。
Ehcache 的使用和配置至少有2种:配置文件+硬编码
这2中,都在项目中使用:配置文件适合缓存名固定的缓存,硬编码针对缓存名称不固定,比如“name + type_id”
2种使用为了灵活方便。
但是我们在硬编码实现时,遇到了一些问题:

CacheManager manager =  CacheKit.getCacheManager();
Cache cache = new Cache("CACHE_"+type.id,10000,false,true,0,0);
cache.setDisabled(false);
cache.initialise();---报错
Element element =  new Element( i, detailIdList,true);
cache.put(element);
manager.addCache(cache);
Exception in thread "Timer-0" java.lang.NullPointerException   at net.sf.ehcache.Cache.initialise(Cache.java:1072)   at com.model.topic.Type.initTopicTypeCache(Type.java:100)   at com.systemConfig.SystemConfig$1.run(SystemConfig.java:209)   at java.util.TimerThread.mainLoop(Timer.java:555)   at java.util.TimerThread.run(Timer.java:505) 查看Cache.initialise 方法: 分析源码,应该是Cache构造实例时候,造成的:loader 为空造成的,但是具体的解决原因暂时还没有找到,请过来人指点迷津,不胜感激!

展开
收起
kun坤 2020-05-31 17:41:02 719 0
1 条回答
写回答
取消 提交回答
  • 引用来自“hanzhankang”的评论

    CacheManager manager =  CacheKit.getCacheManager();
    Cache cache = new Cache("CACHE_"+type.id,10000,false,true,0,0);
    manager.addCache(cache);
    
    Element element =  new Element( i, detailIdList,true);
    cache.put(element);
    如此才是正确的操作方法: Cache 在加入 CacheManager 之前是不能使用的。 但是新问题又出现了:我无法加入多个元素!比如:
    Element elementPage1 =  new Element( i+"", pageNumStr,true);
    cache.put(elementPage1);
    Element elementPage2 =  new Element( pageNumStr,i+"",true);
    cachePage.put(elementPage2);
    这样存入,始终是 elementPage2 替换 elementPage1 ,而我是想要插入操作。。。。好多坑! 因为我将此数据放置在for循环中了,每次都new一个缓存,导致在缓存中只能是一个值,所以是代码问题。 使用时确实是需要先将cache加入到CacheManager中才可以继续操作! ######看了一个帖子: 在每新create一个Cache时, 都要设置下setBootstrapCacheLoader,这个BootstrapCacheLoader是干啥的?  cache类里有个bootstrap方法,这里将调用bootstrapCacheLoader.load(Cache)方法。 现在来看只有RMIBootstrapCacheLoader类实现了BootstrapCacheLoader接口,又是跟集群有关,先不用考虑。 http://rmn190.iteye.com/blog/369073 目前我的Ehcache是2.8.3,BootstrapCacheLoader 有:DiskStoreBootstrapCacheLoaderMemoryLimitedCacheLoaderRMIBootstrapCacheLoaderTerracottaBootstrapCacheLoader 4种实现类 ######
    CacheManager manager =  CacheKit.getCacheManager();
    Cache cache = new Cache("CACHE_"+type.id,10000,false,true,0,0);
    manager.addCache(cache);
    
    Element element =  new Element( i, detailIdList,true);
    cache.put(element);
    如此才是正确的操作方法: Cache 在加入 CacheManager 之前是不能使用的。 但是新问题又出现了:我无法加入多个元素!比如:
    Element elementPage1 =  new Element( i+"", pageNumStr,true);
    cache.put(elementPage1);
    Element elementPage2 =  new Element( pageNumStr,i+"",true);
    cachePage.put(elementPage2);
    这样存入,始终是 elementPage2 替换 elementPage1 ,而我是想要插入操作。。。。好多坑!
    2020-05-31 17:41:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
用户态高速块缓存方案 立即下载
高性能Web架构之缓存体系 立即下载