SpringBoot启动微服务报错Consider defining a bean of type ‘org.springframework.data.redis.core.RedisTemplate

最近遇到一个问题,项目之前使用了Redis,可正常启动,然后最近对Redis部分进行了一些微调,再启动服务提示如下错误:

Consider defining a bean of type 'org.springframework.data.redis.core.RedisTemplate' in your configuration.

出现该错误的原因可能有很多,记录下几种解决办法。

1、SpringBoot版本问题:

pom.xml中如果有配置

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
springboot的版本可能有问题,修改Springboot版本为如下版本即可

<version>1.5.17.RELEASE</version>
 

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.9.RELEASE</version>
	</parent>

将2.0.9.RELEASE改为1.5.17.RELEASE

2、检查Redis配置是否正常,如果没有配置Redis,可在项目下新建一个config的包,在该包下新建RedisConfig类,类的内容如下

@Configuration
public class RedisConfig {

	@Bean
	public RedisTemplate<String, ?> getRedisTemplate(RedisConnectionFactory factory) {
		RedisTemplate<String, ?> template = new RedisTemplate<>();
		template.setKeySerializer(new StringRedisSerializer());
		template.setHashKeySerializer(new StringRedisSerializer());
		template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
		template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
		template.setEnableTransactionSupport(true);
		template.setConnectionFactory(factory);
		return template;
	}
	
}

3、SpringBoot启动扫码包的配置问题,springBoot启动时候,会自动扫描Application所在包路径下的所有bean,检查你所注入RedisTemplate的这个类所在目录,是否再启动类的目录结构之下 

4、注意RedisTemplate的注入注解,看看是Autowired还是Resource,如果是Autowired,可以改为Resource

@Resource
RedisTemplate<String, Set<String>> redisTemplateUA;

这里需要注意,如果RedisTemplate注入的变量名为redisTemplate,此时即使没有进行RedisConfig的配置,依然可以正常启动项目,原因为SpringBoot自动帮我们在容器中生成了一个RedisTemplate和一个StringRedisTemplate。但是,这个RedisTemplate的泛型是<Object,Object>,写代码不方便,需要写好多类型转换的代码;我们需要一个泛型为<String,Object>形式的RedisTemplate。并且,这个RedisTemplate没有设置数据存在Redis时,key及value的序列化方式:

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(
            RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    @Bean
    @ConditionalOnMissingBean
    public StringRedisTemplate stringRedisTemplate(
            RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }
}

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误通常发生在没有正确配置RedisTemplate Bean的情况下,因此Spring无法识别RedisTemplate类型的Bean。 要解决此问题,您可以按照以下步骤操作: 1. 确保在Spring上下文中正确配置了RedisTemplate Bean。可以在Spring配置文件中(如applicationContext.xml)中包含以下配置: ``` <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory"/> <property name="keySerializer" ref="stringRedisSerializer"/> <property name="valueSerializer" ref="stringRedisSerializer"/> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="localhost"/> <property name="port" value="6379"/> <property name="password" value="mypassword"/> </bean> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/> ``` 2. 如果您使用的是Spring Boot,则可以在应用程序主类上使用`@EnableRedisRepositories`注释来启用Redis支持。 ``` @SpringBootApplication @EnableRedisRepositories public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } } ``` 3. 如果您使用的是Spring Boot,则可以在`application.properties`或`application.yml`文件中配置Redis连接属性。 ``` spring.redis.host=localhost spring.redis.port=6379 spring.redis.password=mypassword ``` 通过以上三步操作,应该可以解决该错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晒干的老咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值