J2Cache升级踩坑
yatbfm

1. 运行项目

使用命令git clone https://gitee.com/ld/J2Cache将项目克隆下来,具体安装运行方法参见README.md文档。

2. 部分升级

2.1 Java升级

项目默认使用的jdk1.8,将项目升级为jdk17。修改jdk版本后,使用maven打包项目会报错程序包javax.annotation不存在。需要在根目录的pom.xml添加依赖引入javax.annotation

1
2
3
4
5
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>

继续进行下一步,执行命令runtest.bat,会报错Unable to make field private final byte[] java.lang.String.value accessible: module java.base does not "opens java.lang" to unnamed module @4ed07f8c。通常在jdk9及以上会遇到该问题。

通过mvn命令解决该问题暂时没有找到方法。

可以通过在IDEA中直接运行main方法,添加vm参数,解决该问题。需要添加的vm参数为:

1
2
3
4
5
6
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/java.text=ALL-UNNAMED

由于main方法中,获取的是System.Console,而在IDEA中直接运行,获取不到该对象,需要修改读入输入的对象,将其修改为Scanner对象进行读入。

2.2 Redis升级

将Redis升级5.0版本后。

BinaryJedisCommands类报错,原因是删除了该类,使用JedisBinaryCommands类替代。

RedisClient.java类中,

重写注解报错,父类没有该方法,删除即可。

包装类报错,原因是新版本使用基本类型代替了包装类。

新版本中将返回值由Set类型改为了List。

新版本中移除了类ShardedJedisPool,引入JedisSharding替换。

参数设置错误,只需要一个HostAndPort的列表即可。

最后一个参数poolConfig原来参数类型为JedisPoolConfig,新版本构造函数的类型修改为GenericObjectPoolConfig<Connection>

RedisUtils工具类中,将newPoolConfig方法参数修改为GenericObjectPoolConfig<Jedis>。同时添加方法transferPoolConfig,将GenericObjectPoolConfig<Jedis>转换为GenericObjectPoolConfig<Connection>

在类RedisPubSubClusterPolicy类中,找不到Pool类,将这个类的包修改为import redis.clients.jedis.util.Pool;

RedisGenericCache类中,

将报错类更改为以上类。

RedisPubSubClusterPolicy类中,父类方法指定为final,不能被重写了。

2.3 Rocketmq升级

升级到5.1.4后报错

2.4 FastJson升级

升级到2.0.41,其中groupId和artifactId也进行了更改。

FastjsonSerializer类里

需要修改为com.alibaba.fastjson2,同时引入新类。

由 Hexo 驱动 & 主题 Keep
访客数 访问量