Spring MVC集成Redis缓存管理器报错:AbstractTransactionSupportingCacheManager无法解析
解决Spring MVC集成Redis缓存时AbstractTransactionSupportingCacheManager无法解析的问题
问题根源
你遇到的错误是Spring版本不兼容导致的:
- 项目中
spring-webmvc使用5.2.0.RELEASE版本,而引入的spring-boot-starter-data-redis是2.5.2版本,后者依赖的Spring Framework版本为5.3.x(Spring Boot 2.5.x对应Spring 5.3系列),版本不匹配导致缓存模块中的AbstractTransactionSupportingCacheManager类无法被正确加载。 - 另外Redis配置代码存在参数类型错误:
JedisConnectionFactory.setPort()需要传入int类型,你传入了字符串,运行时会触发类型转换异常。
修复步骤
1. 统一Spring依赖版本
选择以下两种方案之一:
方案A:升级Spring MVC到匹配Spring Boot 2.5.2的版本
修改pom.xml中Spring相关依赖的版本为5.3.9(Spring Boot 2.5.2对应的Spring Framework版本):
<!-- spring dependency --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.3.9</version> </dependency>
方案B:改用纯Spring Data Redis依赖(不使用Spring Boot Starter)
移除spring-boot-starter-data-redis,添加与Spring 5.2.0匹配的Spring Data Redis和Jedis依赖:
<!-- 移除Spring Boot Redis Starter --> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.5.2</version> </dependency> --> <!-- 添加Spring Data Redis和Jedis依赖 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.3.5.RELEASE</version> <!-- 与Spring 5.2.0匹配 --> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> </dependency>
2. 修正Redis配置代码中的错误
修改JedisConnectionFactory的端口参数为int类型,并填写实际的Redis连接信息:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Bean public JedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory factory = new JedisConnectionFactory(); factory.setHostName("你的Redis主机地址"); // 示例:localhost factory.setPort(6379); // 改为int类型,默认端口6379 factory.setPassword("你的Redis密码"); // 无密码可留空或注释 return factory; } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(jedisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); return template; } @Bean public RedisCacheManager cacheManager() { return RedisCacheManager.builder(jedisConnectionFactory()).build(); } }
3. 验证修复
执行mvn clean install刷新依赖,重新启动项目,错误即可解决。
内容的提问来源于stack exchange,提问作者Ali Khan
相关产品推荐
相关产品推荐

