SpringBoot接入Redis

9 篇文章 0 订阅

最近在学习SpringBoot,想尝试将SpringBoot和Redis结合在一起

1.引入SpringBoot Redis启动包

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>${spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

配置Redis的配置,SpringBoot支持application的properties,yaml,yml三种,特别注意配置文件名称不要弄错了,因为把配置文件yaml弄错成了ymal发现最后RedisProperties无法注入半天查不出来原因

spring:
  redis:
    host: 127.0.0.1
    port: 1234

然后直接运行启动类,会发现报错了提示以下两个类找不到
GenericObjectPool.class
Jedis.class
那么问题来了,为什么突然加载到这两个类了

2.spring.factories 配置文件

因为SpringBoot启动的时候会先扫描spring.factories将里面配置的类加载到SpringBoot容器中,其中在spring-boot-autoconfigure包中的spring.factories加载了以下三个关于Redis的类

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\

从名字可以看出RedisAutoConfiguration应该是有关于Redis的自动加载

@Configuration(proxyBeanMethods = false)
@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;
	}

可以看到@EnableConfigurationProperties(RedisProperties.class)这个注解
然后再看RedisProperties这个类

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {

**@ConfigurationProperties(prefix = “spring.redis”)**通过这个注解可以看出RedisProperties 将Application中的spring.redis配置加载到RedisProperties对象中

我们再回顾RedisAutoConfiguration的这个注解
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })

RedisAutoConfiguration 引用了两个连接类:

一个是LettuceConnectionConfiguration
一个是JedisConnectionConfiguration

因为在上面我们引入spring-boot-starter-data-redis包的时候将lettuce-core包剔除了,因此会加载JedisConnectionConfiguration类,而JedisConnectionConfiguration类会引入以下这两个类,如果不引用就会报错

import org.apache.commons.pool2.impl.GenericObjectPool;
import redis.clients.jedis.Jedis;

我们只需要引用一个Jedis的Pom就行了里面就带了commons-pool2的引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值