zoukankan      html  css  js  c++  java
  • 用了Redisson的Spring Boot Starter搞的我都想重写个

    在对接一个小程序推送的框架时,需要将 access_token 存储到 Redis 中,框架中提供了存储逻辑,只需要将 RedissonClient 对象传进去即可。 框架内部在用 Redisson 的 RBucket 进行数据存储时报错了,原因是 fst 里面的一个方法找不到了,这一看就是版本的问题。

    Redisson 中依赖的 fst 是 2.57,这个版本是没问题,主要是目前项目的依赖版本降低了,原因是 dubbo 中依赖了低版本,影响了原有的版本。

    解决方案很简单,强制申请要使用的版本即可,今天主要不是讲这个如何解决的,是想说下另一些使用不太方便的点。

    默认编码

    根据官方文档的说明,默认编码是 jackson, 从我们上面的错误来看,是用了 fst 编码才报的错。而项目中没有单独设置过编码方式,所以这里文档是不是没及时更新?

    在构造 Config 对象里面看到了默认的编码设置:

    配置编码

    如果你想换一种编码方式,本来想着用了 redisson-spring-boot-starter,应该直接可以通过配置指定对应的编码方式。

    翻翻源码一看并没有这些配置信息,看文档得知,你可以自定义一个 yml 文件来配置相关信息,然后指定这个 yml 文件的路径。

    spring:
      redis:
        redisson:
          config: classpath:redisson.yml
    

    在 Starter 包中自动装配的逻辑如下,就是根据配置路径加载整个文件的内容,然后转换成 Config 对象。

    所以如果我要替换默认的编码方式,就需要自定义一个 redisson.yml 文件进行配置,说实话不方便,最方便的还是直接配置,比如

    spring.redis.redisson.codec=org.redisson.codec.JsonJacksonCodec
    

    另一点在于,如果需要自定义文件来进行配置,对于多环境的区分不是很好,需要每个环境对应一个配置文件,然后在配置中心中指定使用哪个自定义的文件。

    spring.redis.redisson.config: classpath:redisson-beta.yml
    或者
    spring.redis.redisson.config: classpath:redisson-product.yml
    

    然后 redisson.yml 这里面的文件内容不能放到配置中心里去,加载不到。如果内容要放进去,需要改动加载配置的代码,就不能通过 classpath 去读取了,需要从配置中心去读取。

    如果实在觉得不好用就重写个吧,也挺快的,哈哈!

    关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号猿天地发起人。

    我整理了一份很全的学习资料,感兴趣的可以微信搜索「猿天地」,回复关键字 「学习资料」获取我整理好了的 Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC 分库分表,任务调度框架 XXL-JOB,MongoDB,爬虫等相关资料。

  • 相关阅读:
    nginx增加lua支持
    使用nginx+lua实现web项目的灰度发布
    amoeba学习
    信号有关的内容
    Linux系统的进程相关内容
    等待类型
    孤立用户故障排除
    恢复数据库
    执行计划之Insert,update,delete
    临时表和表变量
  • 原文地址:https://www.cnblogs.com/yinjihuan/p/14010202.html
Copyright © 2011-2022 走看看