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