使用白名单搭配自定义编组器运行Infinispan迁移工具遇阻
Infinispan v10 迁移至 v14 遇到 SOFT_INDEX_FILE_STORE 迁移问题的解决思路
问题梳理
- 迁移触发报错:
ISPN000616: Unsupported persisted data version: < 11,需使用SOFT_INDEX_FILE_STORE迁移工具处理 - 按官方文档配置源/目标缓存名称、路径后,迁移生成0字节数据文件,无有效数据输出
- 调试迁移工具代码发现,可通过
marshaller.class指定编组器(该配置仅在JDBC属性文档中有提及),但无法配置序列化白名单 - 尝试扩展
SoftIndexFileStoreIterator修改SerializationConfigUtil.getEntryFactory(props)方法以构建正确的GlobalConfigurationBuilder,但因核心代码为包私有或私有访问权限,无法实现扩展
可行解决方法
通过JVM系统属性配置序列化白名单
启动迁移工具时,添加以下JVM参数指定需要反序列化的类白名单:-Dinfinispan.deserialization.whitelist.classes=com.yourcompany.EntityA,com.yourcompany.EntityB该系统属性会被Infinispan全局序列化配置自动读取,无需修改迁移工具源码即可生效。
构建自定义迁移工具Jar包
基于Infinispan源码搭建自定义项目:- 复制
SoftIndexFileStoreMigrationTask及关联核心类到自定义工程 - 修改
SerializationConfigUtil.getEntryFactory方法,手动向GlobalConfigurationBuilder中添加白名单配置 - 打包为独立Jar包,使用自定义Jar执行迁移操作
- 复制
分步迁移过渡
先将v10版本数据迁移至v11版本,再从v11升级到v14:- 部署Infinispan v11实例,配置与v10相同的SOFT_INDEX_FILE_STORE存储路径
- 启动v11实例,让其自动完成数据格式的升级适配
- 再将v11版本的数据迁移至v14版本,规避跨多个大版本直接迁移的兼容性问题
同类问题参考
社区内有不少用户遇到过类似跨版本迁移的序列化配置问题,核心解决思路都是确保迁移工具能正确识别旧版本的序列化类,通过系统属性或自定义工具基本能覆盖大部分场景。
内容的提问来源于stack exchange,提问作者Alain P
相关产品推荐
相关产品推荐

