目前使用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)查看Cache.initialise 方法:
分析源码,应该是Cache构造实例时候,造成的:loader 为空造成的,但是具体的解决原因暂时还没有找到,请过来人指点迷津,不胜感激!
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);
但是新问题又出现了:我无法加入多个元素!比如:
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是干啥的?现在来看只有RMIBootstrapCacheLoader类实现了BootstrapCacheLoader接口,又是跟集群有关,先不用考虑。
http://rmn190.iteye.com/blog/369073
目前我的Ehcache是2.8.3,BootstrapCacheLoader 有:DiskStoreBootstrapCacheLoader, MemoryLimitedCacheLoader, RMIBootstrapCacheLoader, TerracottaBootstrapCacheLoader 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);
但是新问题又出现了:我无法加入多个元素!比如:
Element elementPage1 = new Element( i+"", pageNumStr,true); cache.put(elementPage1); Element elementPage2 = new Element( pageNumStr,i+"",true); cachePage.put(elementPage2);
这样存入,始终是 elementPage2 替换 elementPage1 ,而我是想要插入操作。。。。好多坑!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。