在SpringBoot中注入RedisTemplate实例异常的解决方案:
- 导入 Redis Starter 依赖
在 Spring Boot 项目的 pom.xml 文件中,添加 Redis Starter 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置 Redis
在 application.properties 或 application.yml 中添加 Redis 配置信息。
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
- 自定义 RedisTemplate Bean
在 Spring Boot 项目中,如果需要对 Redis 做一些自定义的操作,需要自定义 RedisTemplate Bean。
@Configuration
public class RedisConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
/**
* 自定义 RedisTemplate Bean
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
其中,上述 Bean 定义了一个 RedisTemplate 实例,主要进行了三个配置:
- 设置 Redis 连接工厂;
- 设置 Redis key 序列化器为 StringRedisSerializer;
-
设置 Redis value 序列化器为 GenericJackson2JsonRedisSerializer。
-
使用 RedisTemplate
在需要使用 Redis 的类中,通过 @Autowired
注解注入 RedisTemplate 实例,即可操作 Redis。
@RestController
public class RedisController {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@GetMapping("/set")
public String setKeyAndValue(String key, String value) {
redisTemplate.opsForValue().set(key, value);
return "set key and value success";
}
@GetMapping("/get")
public String getValueByKey(String key) {
Object value = redisTemplate.opsForValue().get(key);
return value != null ? value.toString() : "value not found";
}
}
注:示例中使用 RedisTemplate 的 opsForValue 方法操作 Redis,可以根据具体需求使用其他操作方法。
示例 1:
当注入 RedisTemplate 实例时,如果出现错误:No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<java.lang.String, java.lang.Object>' available: expected at least 1 bean which qualifies as autowire candidate.
可以对 RedisTemplate Bean 进行重新定义。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
示例 2:
当 RedisTemplate 实例注入失败,可以通过 @DependsOn
解决循环依赖的问题。
@Configuration
public class RedisConfig {
@Autowired
private RedisConnectionFactory connectionFactory;
@DependsOn("redisConnectionFactory")
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
注:上述示例中,通过 @DependsOn
指定 RedisTemplate Bean 依赖于 redisConnectionFactory Bean。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在SpringBoot中注入RedisTemplate实例异常的解决方案 - Python技术站