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

使用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异常。

转载于:https://my.oschina.net/u/1010578/blog/389683

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值