java学习之路笔记(一):SpringBoot项目中配置Redis过程以及遇到的问题

本文介绍了在SpringBoot 2.6.1项目中配置Redis的过程,包括pom.xml文件的更新、yml配置、配置类的编写以及遇到的配置注入问题和解决方法。在配置过程中,特别提到了针对不同SpringBoot版本的配置差异,以及如何自定义RedisTemplate以优化操作。最后,解决了RedisTemplate注入失败的问题。
摘要由CSDN通过智能技术生成

关于近期SpringBoot项目中配置Redis过程以及遇到的问题

一:配置pom.xml文件

<!--redis-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

二:对yml文件进行配置
这里本人在一开始配置时遇到pool的配置无法注入的问题,经查找问题后发现Springboot版本相对应的写法稍有不同,
本人这边用到的是2.6.1版本,版本号在pom文件中可以找到

Springboot 1.*版本

redis:
        database: 0
        host: 127.0.0.1
        port: 6379
        password: 
        pool:
        #最大连接数
        max-active: 8
        #最大阻塞等待时间
        max-wait: 6000
        #最大空闲连接
        max-idle: 8
        #最小空闲连接
        min-idle: 0
        timeout: 5000

SpringBoot 2.*版本

redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password:
    jedis:
      pool:
        #最大连接数
        max-active: 8
        #最大阻塞等待时间
        max-wait: 6000
        #最大空闲连接
        max-idle: 8
        #最小空闲连接
        min-idle: 0
    timeout: 5000

三:配置类
测试时愚蠢的把配置类给忘配了,一直报错
因为 RedisAutoConfiguration 类中使用了 @ConditionalOnMissingBean(name = “redisTemplate”) 注解,所以我们可以配置自己的 RedisTemplate 类,实现一些定制功能,例如: 返回的 RedisTemplate 的泛型是 <String, Object> 的,可以减少不必要的类型转换操作 设置 Key 和 Value 的序列化方式

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * @author dinghomie
 * @date 2019/08/27
 */
@Configuration
public class RedisConfig {
   

    /**
     * @SuppressWarnings 该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默
     *
     *    关键字         用途
     *    deprecation   使用了不赞成使用的类或方法时的警告
     *    unchecked     执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
     *    fallthrough   当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
     *    path          在类路径、源文件路径等中有不存在的路径时的警告。
     *    serial        当在可序列化的类上缺少 serialVersionUID 定义时的警告。
     *    finally       任何 finally 子句不能正常完成时的警告。
     *    all           关于以上所有情况的警告。
     */

//    注入 Spring 容器中,忽略所有警告
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
   
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//        key 采用 String 的序列化方式
        template.setKeySerializer(stringRedisSerializer);
//        hash 的 key 也采用 String 的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
//        value 的序列化方式采用 JSON
        template.setValueSerializer(jackson2JsonRedisSerializer);
//        hash value 的序列化方式也采用 JSON
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

}

四:工具类
在这里遇到的问题是RedisTemplate注入失败

解决方案:

@Autowired
private RedisTemplate<String, Object> redisTemplate;

修改为

@Resource
private RedisTemplate<String, Object> redisTemplate;

完整代码

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.List;
import
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值