我有一个使用 JBoss Cache 缓存一些内部对象的应用程序,缓存数据保存在 MySQL 数据库中。当应用程序启动时,持久化在数据库中的数据将被加载到缓存中。Java 序列化机制用于持久化数据。serialVersionUID
我为这些持久性 Java 类的字段分配了一个固定值。
问题是当有人对序列化格式引入不兼容的更改时,由于反序列化错误,从数据库加载缓存数据将失败。经过一些研究,我得到了一些可能的解决方案,但不确定哪个是最好的。
- 更改
serialVersionUID
以使用新版本。这种方法似乎很容易。但是我是否需要将所有类的serialVersionUID
字段值更改为新版本,或者只是实际更改的类?因为读取的其实是一个对象图,如果不同的类使用不同的序列化版本,反序列化整个对象图会不会有问题? - 使用相同的
serialVersionUID
值,但创建我自己的readObject
和“writeObject”。 - 使用
Externalizable
界面。
哪种方法可能是最好的解决方案?