springboot2.0整合kafka_spring与mybatis整合

springboot2.0整合kafka_spring与mybatis整合首先引入POM依赖 <!–nosql数据库–> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependenc…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

首先引入POM依赖

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

		<!--spring2.0集成redis所需common-pool2-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.4.2</version>
		</dependency>

		<!--fastjson-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.8</version>
		</dependency> 

加入配置

这里我用的是YML的格式

spring: 
    redis:
      #数据库索引
      database: 0
      host: 127.0.0.1
      port: 6379
      password:
      jedis:
        pool:
          #最大连接数
          max-active: 8
          #最大阻塞等待时间(负数表示没限制)
          max-wait: -1
          #最大空闲
          max-idle: 8
          #最小空闲
          min-idle: 0
      #连接超时时间
      timeout: 10000

正常情况下这样就可以直接使用了

@SpringBootTest
@RunWith(SpringRunner.class)
@Component
public class TestRedis {

    @Autowired
    private RedisTemplate redisTemplate;
    
    @Test
    public void set(){
        redisTemplate.opsForValue().set("test:set","testValue1");
    }
}

完了?

没错,完了!

可能你就好奇了,不对呀,刚刚还引入了fastjson啊,这就是文章的重点了,然我们跑一下刚刚的程序,看一下我们存的键值对

springboot2.0整合kafka_spring与mybatis整合

虽然存取是没什么问题,但是这看着让人很蓝受,让我们翻阅Redis的源码发现RedisTemplate中有这么一段

springboot2.0整合kafka_spring与mybatis整合

这是由于默认序列化方式导致的,竟然发现了问题,现在就解决它

首先自定义一个通用序列化方式的类

public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {

    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

    private Class<T> clazz;

    public FastJsonRedisSerializer(Class<T> clazz) {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException {
        if (null == t) {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        if (null == bytes || bytes.length <= 0) {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);
        return (T) JSON.parseObject(str, clazz);
    }

}

然后我们找源码

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

毫无疑问,它就是Redis的核心配置了,新建一个类RedisConfig把RedisAutoConfiguration中的内容全部复制过来,稍加修改

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig {

    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(
            RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();

        //使用fastjson序列化
        FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
        // value值的序列化采用fastJsonRedisSerializer
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setHashValueSerializer(fastJsonRedisSerializer);
        // key的序列化采用StringRedisSerializer
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());

        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

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

}

如上代码所见,我们修改了key和value的序列化规则,key就用Redis本身提供的序列化方式,value就用我们刚刚定义的fastjson序列化方式。

至此完毕



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189299.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA生成uuid_oracle随机生成uuid

    JAVA生成uuid_oracle随机生成uuidUUID生成importjava.util.UUID;publicclassJavaUUIDTest{publicstaticvoidmain(String[]args){//未加工的UUIDStringpreUuid=UUID.randomUUID().toString();System.out.println(preUuid);//第一种方法生成UUID,去掉“-”符号

    2022年9月23日
    2
  • cssText属性的使用「建议收藏」

    cssText属性的使用「建议收藏」cssText是什么?简单来说是设置元素的style属性值,比如 ele.style.cssText = 'display: block';

    2022年7月4日
    29
  • 单片机看门狗工作原理_51单片机看门狗

    单片机看门狗工作原理_51单片机看门狗/*此程序实现单片机”看门狗”WDT的功能*/#include”p18f458.h”unsignedlongi;/*系统初始化子程序*/voidinitial(){TRISD=0X00;/*D口设为输出*/}/*延时子程序*/voidDELAY(){for(i=19999;–i;)continue;}/*主程序*/main(){initial();/*初始化,设定看门狗的相关寄存器*/PO…

    2025年8月13日
    2
  • f1-score是什么_python概念题

    f1-score是什么_python概念题一、F1score概念?F1score是分类问题的一个衡量指标,一些多分类问题的机器学习竞赛,常把F1score作为最终评测的方法。它是精确率和召回率的调和平均数,取值0-1之间。F1score认为召回率和精确率同样重要,而F2认为召回率的重要程度是精确率的2倍,F0.5则认为召回率的重要程度是精确率的一半。要明确几个概念TP(TruePositive):被判定为正样本,实际为正样本 TN(TrueNegative):被判定为负样本,实际为负样本 FP(FalseP

    2022年10月14日
    2
  • Java Web项目 图书管理系统「建议收藏」

    Java Web项目 图书管理系统「建议收藏」版权声明:本文为博主原创文章,未经博主允许不得转载2019.5.22更新看到很多人看这个项目我也没想到,不过我现在不在CSDN写文章了,博客地址链接←这是我的博客地址链接GitHub地址链接←这是我的github地址链接里面有我学习Java的过程以及笔记,希望大家一起交流。由于刚刚学习完JSP和Servlet在学习框架之前下你给更加巩固一下前面的知识所以写…

    2022年7月13日
    19
  • cglib代理[通俗易懂]

    cglib代理[通俗易懂]cglib代理​ 在此之前,我们学习了JDK动态代理,而JDK动态代理有一定的局限性,因为使用JDK动态代理时,被代理类必须实现接口,然后动态代理生成的代理类同时实现该接口实现代理模式,但在特定情况下没办法让被代理类实现接口,那么此时我们就需要使用cglib代理。代理模式的三要素两个成员:被代理对象、执行者(类似于Spring中切面的概念)使用场景:当某件事情不方便自己做,但是必须要做时…

    2022年5月6日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号