开发者社区> 问答> 正文

Mybatis配置ehcache报错(说未序列化),求解!~!!?报错

VO类已经序列化(部分代码如下):

import java.io.Serializable;




public class Products implements Serializable{


/**

*/
private static final long serialVersionUID = -6193310436318894856L;

ehcache.xml文件配置如下:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">


    <diskStore path="java.io.tmpdir"/>

    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>


 

报错:

2013-11-13 13:53:12,901 - net.sf.ehcache.store.disk.DiskStorageFactory -78860 [org%002emapper%002e%0050roducts.data] ERROR net.sf.ehcache.store.disk.DiskStorageFactory  - Disk Write of 1744313901:5183834706:org.mapper.Products.selectAllByOneBusid:0:2147483647:SELECT * 
        FROM PRODUCTS 
        WHERE BUSINESSID=?
        ORDER BY PROLIKE DESC:5 failed:  
java.io.NotSerializableException: org.apache.ibatis.cache.CacheKey
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:416)
at net.sf.ehcache.Element.writeObject(Element.java:835)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97)
at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:405)
at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:384)
at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:485)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1088)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1072)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)


请问除了vo类要序列化,还有什么需要序列化?


==================update==========================

报错点在这里:

不明白的是居然该对象不是Serializable对象,但是我明明已经实现了Serializable接口,但是却实例化失败了,这究竟是怎么回事,弄了很久没想明白?恳请各位帮忙。。

展开
收起
爱吃鱼的程序员 2020-06-22 14:30:32 878 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你Products 是不是引用了其它没实现序列化接口的对象了!
    回复<aclass='referer'target='_blank'>@李三石:我试试回复<aclass='referer'target='_blank'>@wang_liran:检查一下你项目lib下面是不是有两个版本的mybatis包,升级mybaitis试试!貌似和这个一样https://groups.google.com/forum/#!topic/mybatis-user/kgSd2viMbok回复<aclass='referer'target='_blank'>@李三石:mybatis3.0.2回复<aclass='referer'target='_blank'>@wang_liran:mybatis那个版本?单纯的VO类,全是属性和settergetter方法,没有引用其他类没人知道吗貌似你缓存的时候使用LoggingEhcache 会有问题,换EhcacheCache就可以了!
    <divclass="ref">

    引用来自“李三石”的答案

    <divclass=ref_body>你Products 是不是引用了其它没实现序列化接口的对象了!
    <divclass="ref">

    引用来自“李三石”的答案

    <divclass=ref_body>貌似你缓存的时候使用LoggingEhcache 会有问题,换EhcacheCache就可以了!
    是不是需要重新toString方法。。
    回复<aclass='referer'target='_blank'>@hanzhankang:准确来说是缓存序列化对象,这我知道,但是我的确序列化了,报错却提示说我没有序列化,我不清楚问题出在哪里了回复<aclass='referer'target='_blank'>@wang_liran:EHcache缓存的是对象或者对象的集合回复<aclass='referer'target='_blank'>@hanzhankang:我的对象没有引用任何别的非序列化方法,纯VO类,打印出来的sql就是查询products表,并且按照某个字段进行排序,我能正常运行程序并输出我想要的数据,但是EHcache没有成功运用并且报错,换句话说,程序本身没问题,问题就是缓存这块回复<aclass='referer'target='_blank'>@wang_liran:检查你的对象,那个打印出来的sql是什么意思重写了toString方法,报错如旧实体类要实现序列化接口,Serializable麻烦请看清楚问题再回答好吗否则怎么写到硬盘上啊,重写toString方法很可笑,首先要明白toString方法是干嘛的好好看文档

    2020-06-22 14:30:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载