首页 > 系统服务 > 详细

使用EhCache将对象put进缓存后,get出来为null的问题

时间:2015-03-21 11:23:35      阅读:3530      评论:0      收藏:0      [点我收藏+]

使用EhCache将对象put进缓存后,get出来为null的问题

问题

以前使用EhCache缓存数据的时候,保存的value都是基于Java的基础类型数据,最近发现保存自定义类型的对象时,get()出来的Element要么为null,要么当用Element的getValue()时抛出net.sf.ehcache.CacheException: Value xxx is not Serializable异常。

解决方案

  1. EhCache在put对象时,该对象必须是可序列化(Serializable)的类型,也就是说要实现java.io.Serializable。因为EhCache在put对象时,是序列化保存的。
    官方文档对EhCache put方法的说明

    put

    void put(Element element)throws IllegalArgumentException,IllegalStateException,CacheException
    Put an element in the cache.
    Resets the access statistics on the element, which would be the case if it has previously been gotten from a cache, and is now being put back.

    Also notifies the CacheEventListener that:

    the element was put, but only if the Element was actually put.
    if the element exists in the cache, that an update has occurred, even if the element would be expired if it was requested
    Parameters:
    element - An object. If Serializable it can fully participate in replication and the DiskStore.

    Throws:
    IllegalStateException - if the cache is not Status.STATUS_ALIVE
    IllegalArgumentException - if the element is null
    CacheException

另外:EhCache的flush()方法是将缓存序列化到文件中, 缓存配置diskPersistent=“true"时有用。如果put没有序列化的对象后再flush(),从Cache中get()将得到null(不支持序列化对象,没法持久化到文件中)。如果put后没有flush(),则可以get()到缓存的Element,但是当调用Element的getValue()取缓存对象时,会报net.sf.ehcache.CacheException: Value xxx is not Serializable异常。

使用EhCache将对象put进缓存后,get出来为null的问题

原文:http://my.oschina.net/u/1010578/blog/389683

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!