serialVersionUID不一致导致控制台出现异常:java.io.InvalidClassException

2013-07-01 17:13:15.101 WARN net.spy.memcached.transcoders.SerializingTranscoder:  Caught IOException decoding 848 bytes of data
java.io.InvalidClassException: com.*.article.qa.entity.Qa_question; 
  local class incompatible: stream classdesc serialVersionUID = 5590259895198052390, local class serialVersionUID = 7673969121092229700
	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
	at net.spy.memcached.transcoders.BaseSerializingTranscoder.deserialize(BaseSerializingTranscoder.java:129)
	at net.spy.memcached.transcoders.SerializingTranscoder.decode(SerializingTranscoder.java:88)
	at net.spy.memcached.transcoders.TranscodeService$1.call(TranscodeService.java:63)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at net.spy.memcached.transcoders.TranscodeService$Task.run(TranscodeService.java:110)
	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:662)

 访问一些链接,访问数据库,底层就抛出这个错误。并非都出现,而是几率性出现。

目前并没有发现不一致的地方。有可能是底层缓存net.spy.memcached里的代码影响。原因是:我本地的实体增加了三个字段,但是缓存里并没有改变影响,进一步追踪中......

根据网上说明:

异常原因

本地和远程的entity序列化后的serialVersionUID不一致导致

解决方法

将本地的序列化的类中的版本号(serialVersionUID )改成和远程中一样,在本地的序列化类里的private static final long serialVersionUID = 改成远程的就行了,如果没有的话就加上这句。
 
解决办法:
在dao.propertities里面添加:memcache.key.version.Qa_question=1.0.1
为什么添加这行,说明如下:

Dao配置文件 dao.properties,由系统启动加载,系统变量"-Ddao.config.file=文件的绝对路径"

#entity默认的key版本
memcache.key.version.default=1.0.0
#如果一个entity版本变更,需要在配置文件中定义一个key,无须重启,自动生效
#格式:memcache.key.version.{entity的class名字}=版本号
memcache.key.version.User=1.0.1

#memcache client factory class name
#如果开启cache,打开下行注释,不启动cache,注释下行
memcache.client.factory=MemcachedClientSpyFactory

# Spy Params Config
spy.memcached.servers=host1:11211,host2:11311
# Set the default expire time in seconds
spy.memcached.defaultExpire=86400
spy.memcached.compressionThreshold=16384
# Set the default operation timeout in milliseconds.
spy.memcached.opTimeout=1000

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值