用了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,爬蟲等相關資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章