用了Redisson的Spring Boot Starter搞的我都想重寫個

猿天地 發表於 2020-11-20
Redis Spring

在對接一個小程式推送的框架時,需要將 access_token 儲存到 Redis 中,框架中提供了儲存邏輯,只需要將 RedissonClient 物件傳進去即可。 框架內部在用 Redisson 的 RBucket 進行資料儲存時報錯了,原因是 fst 裡面的一個方法找不到了,這一看就是版本的問題。

Redisson 中依賴的 fst 是 2.57,這個版本是沒問題,主要是目前專案的依賴版本降低了,原因是 dubbo 中依賴了低版本,影響了原有的版本。

解決方案很簡單,強制申請要使用的版本即可,今天主要不是講這個如何解決的,是想說下另一些使用不太方便的點。

預設編碼

根據官方文件的說明,預設編碼是 jackson, 從我們上面的錯誤來看,是用了 fst 編碼才報的錯。而專案中沒有單獨設定過編碼方式,所以這裡文件是不是沒及時更新?

用了Redisson的Spring Boot Starter搞的我都想重寫個

在構造 Config 物件裡面看到了預設的編碼設定:

用了Redisson的Spring Boot Starter搞的我都想重寫個

配置編碼

如果你想換一種編碼方式,本來想著用了 redisson-spring-boot-starter,應該直接可以通過配置指定對應的編碼方式。

翻翻原始碼一看並沒有這些配置資訊,看文件得知,你可以自定義一個 yml 檔案來配置相關資訊,然後指定這個 yml 檔案的路徑。

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

在 Starter 包中自動裝配的邏輯如下,就是根據配置路徑載入整個檔案的內容,然後轉換成 Config 物件。

用了Redisson的Spring Boot Starter搞的我都想重寫個

所以如果我要替換預設的編碼方式,就需要自定義一個 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,爬蟲等相關資料。