问题解决:Consider defining a bean of type 'org.springframework.data.redis.core.RedisTemplate' in your configuration.
问题描述:
今天在使用Java的springboot框架配置redis的时候 执行报错:
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-07-26T23:46:09.571+08:00 ERROR 86816 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field redisTemplate in app.test4.checkHuman.assembly.RedisCleanupScheduler required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'org.springframework.data.redis.core.RedisTemplate' in your configuration.
这个错误表明在RedisCleanupScheduler类中的redisTemplate字段需要一个类型为org.springframework.data.redis.core.RedisTemplate的bean,但是Spring Boot应用程序没有找到这个bean的定义。
问题解决
-
定义RedisConfig类
RedisTemplate是用于操作Redis的一个重要类。为了解决这个问题,你需要确保已经正确配置了RedisTemplate的bean。
在你的配置类中添加以下bean定义来创建一个RedisTemplate的实例:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private int redisPort;
@Value("${spring.redis.password}")
private String redisPassword;
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(redisHost, redisPort);
redisStandaloneConfiguration.setPassword(redisPassword);
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Object.class));
return redisTemplate;
}
}
使用了JedisConnectionFactory来配置Redis连接,并创建了一个RedisTemplate的bean实例,并设置了连接工厂、键值的序列化方式等。
确保将RedisConfig类添加到你的Spring Boot主类或者使用@ComponentScan等注解来确保它被扫描到。
一旦添加了RedisConfig配置类,应用程序应该能够正确创建RedisTemplate的bean,并且解决这个错误。
-
检查yml文件配置内容是否正确 如果你已经配置了yml文件的的redis有关配置,并正确添加了redis依赖
data:
redis:
host: localhost
port: 6379
password: your password
在application.yml中正确配置Redis的信息应该就足够了,无需再创建RedisConfig类。
根据你提供的配置信息,data.redis.host、data.redis.port 和 data.redis.password应该被正确加载为Redis的配置信息。这样,在Spring Boot启动时,RedisTemplate会自动根据这些配置信息来创建一个Redis连接,并且将RedisTemplate的实例注入到需要使用的地方,例如RedisCleanupScheduler类中的redisTemplate字段。
因此,在这种情况下,你不需要手动创建RedisConfig类。RedisTemplate的bean将会被自动创建,并且会被自动注入到需要使用的地方,只要你的配置是正确的,应用程序应该能够正确地访问Redis。
所以按道理来讲,在yml中配置了redis,就不需要再创建RedisConfig类了,除非你的配置是有问题或者没生效,这时仔细检查你的yml文件的配置
如果还是不行就创建一个RedisConfig类吧
本文由 mdnice 多平台发布