0


Redisson集成到nacos配置中心的问题

Redisson集成到nacos配置中心的问题

背景

因为微服务项目都需要用到redisson,所以就想着将配置提取出来放到nacos上作为共享配置使用,nacos显示已经加载配置文件了,但项目启动后却没有起作用,本地使用的配置是有作用的

本地的配置方式

spring:application:name: xxx-service
  redis:redisson:file: classpath:redisson.yml

放到nacos配置中心的配置文件redisson.yaml

spring:redis:redisson:config: 
        # 集群模式
        clusterServersConfig:
          # 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,
          # 那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。默认10000idleConnectionTimeout:10000
          # 同节点建立连接时的等待超时。时间单位是毫秒。默认10000connectTimeout:5000
          # 等待节点回复命令的时间。该时间从命令发送成功时开始计时。默认3000timeout:3000......

这个配置文件看上去没有任何问题,能加载也能读取相关变量,但是就是不能被redisson使用

出现的问题

nacos加载配置文件的时候会进行处理,将文件压缩成一行,一般没问题,但是redisson的配置中会出现一些特殊配置项,比如

codec: !<org.redisson.codec.MarshallingCodec> { }

具体源码没深究,猜测的原因是因为redisson需要读取这些特殊配置,所以针对文件内容不允许换行(乱猜的,很可能不对,欢迎指正)

解决办法

使用 yaml 的特殊字符 | 即可解决问题。

spring:redis:redisson:config:|
        # 集群模式
        clusterServersConfig:
          # 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,
          # 那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒。默认10000idleConnectionTimeout:10000
          # 同节点建立连接时的等待超时。时间单位是毫秒。默认10000connectTimeout:5000
          # 等待节点回复命令的时间。该时间从命令发送成功时开始计时。默认3000timeout:3000......

| 控制符

| 这个控制符的作用是保留文本每一行尾部的换行符。|会保证整段文本最后有且只有一个换行符。使用 |+ 可以保留整段文本最后的所有换行符,使用 |- 可以删除整段文本最后的所有换行符。

补充

今天追了一下redisson获取config的源码,其中有下面这么一段代码,从代码中可以看出他存储config是以字符串的方式存储的

publicclassRedissonProperties{privateString config;privateString file;publicRedissonProperties(){}....

然后还有这么一段代码,从代码中可以知道先是获取字符串配置信息然后再进行解析

Config config;if(this.redissonProperties.getConfig()!=null){try{
                config =Config.fromYAML(this.redissonProperties.getConfig());}catch(IOException var20){try{
                    config =Config.fromJSON(this.redissonProperties.getConfig());}catch(IOException var19){
                    var19.addSuppressed(var20);thrownewIllegalArgumentException("Can't parse config", var19);}}}---------------------------publicstaticConfigfromYAML(String content)throwsIOException{ConfigSupport support =newConfigSupport();return(Config)support.fromYAML(content,Config.class);}

最后我们再回到yaml的特殊字符 | 上去,根据 | 字符代表的含义可以知道它会保留争端文本的最后一个换行符,举例来说
YAML格式
key: |
a
b
c
实际效果
“key”: “a\nb\nc\n”
所以答案就显而易见了,只有加了| 才符合redisson读取字符串类型的config信息

标签: java git

本文转载自: https://blog.csdn.net/hou11122/article/details/129744471
版权归原作者 竹杖芒鞋敲代码 所有, 如有侵权,请联系我们删除。

“Redisson集成到nacos配置中心的问题”的评论:

还没有评论