Spring Boot升级到2.5.0后Redis依赖版本冲突启动失败如何解决
问题根因
- 依赖存在两个核心冲突:
- 同时引入了两个版本的Spring Session类库:旧版
spring-session 1.3.5.RELEASE和新版spring-session-data-redis 2.5.0,两个Jar包都包含RedisOperationsSessionRepository类,版本不兼容导致构造方法找不到 - 旧版Spring Session 1.x 与 Spring Boot 2.5.x内置的Spring Data Redis 2.x版本API不兼容,旧版调用的
getConfig方法签名在新版RedisConnection中已经变更
- 同时引入了两个版本的Spring Session类库:旧版
解决方案
按如下规则修改pom.xml依赖:
- 完全删除旧版
spring-session依赖:Spring Boot 2.x之后Spring Session的Redis支持已经独立为spring-session-data-redis模块,不需要再引入旧的spring-session通用依赖 - 不需要手动指定
spring-boot-starter-data-redis和spring-session-data-redis的版本号:Spring Boot 2.5.0的父POM已经内置了兼容的版本号,自动匹配不会出现冲突
修改后的最终依赖配置
<!-- Redis Session相关依赖,不需要指定版本号,由Spring Boot父POM统一管理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
代码适配说明
如果你的代码中还在手动实例化RedisOperationsSessionRepository,需要做对应调整:
Spring Session 2.x中RedisOperationsSessionRepository已经被标记为弃用,替换为RedisIndexedSessionRepository,如果有手动构造Bean的代码,调整为如下写法即可:
@Bean public RedisIndexedSessionRepository sessionRepository(RedisConnectionFactory redisConnectionFactory) { return new RedisIndexedSessionRepository(redisConnectionFactory); }
验证步骤
修改依赖后执行如下命令清理旧的依赖缓存,再启动项目:
mvn clean install
启动后如果没有类不存在、方法不存在的报错,说明依赖冲突已经解决。
内容的提问来源于stack exchange,提问作者Bhanu Agrawal
相关产品推荐
相关产品推荐

