当前位置: 首页 > article >正文

Spring + Tomcat项目中nacos配置中文乱码问题解决

实际工作的时候碰到了nacos中文乱码的问题,一顿排查最终还是调源码解决了。下面为具体的源码流程,有碰到的可以参考下。

对于nacos配置来说,初始主要源码就在NacosConfigService类中。里面有初始化获取配置content以及设置对应监听器的操作。具体可以参考:详解Nacos 配置中心客户端配置缓存动态更新的源码实现 - 简书

对于监听器,我们可以通过注解@NacosConfigListener去自定义监听器。但我们通@NacosValue注解配置的一些配置能进行动态刷新,就意味着nacos内部肯定有自定义的监听器,也是靠这个监听器进行数据的动态刷新。对应的类为NacosPropertySourcePostProcessor,具体的方法流程图如下:

addListenerIfAutoRefreshed -> receiveConfigInfo -> NacosPropertySource newNacosPropertySource = new NacosPropertySource(dataId, groupId, name, config, type);

上述初始化NacosPropertySource 的过程就是导致nacos配置中文乱码的原因
跟进初始化方法如下:
public NacosPropertySource(String dataId, String groupId, String name,
    String nacosConfig, String type) {
		super(name, toProperties(dataId, groupId, nacosConfig, type));
		this.type = type;
}


toProperties(dataId, groupId, nacosConfig, type) -> ConfigParseUtils.toProperties(dataId, group, text, type) -> toProperties(context, type) -> configParse.parse(context) 其中configParse为DefaultPropertiesConfigParse -> loader.load() -> load(true) -> OriginTrackedPropertiesLoader.CharacterReader reader = new OriginTrackedPropertiesLoader.CharacterReader(this.resource);


而其中异常原因就在new OriginTrackedPropertiesLoader.CharacterReader( this.resource) 这行代码中,点进去代码如下,其中编码格式为ISO_8859_1。导致中文解析就乱码。

我测试的nacos-spring-text版本如下,为1.0.0版本。在maven仓库中,这个版本显示是2020年发布的。

我尝试将nacos-spring-text版本更换为1.1.0后,可以看到在DefaultPropertiesConfigParse类中,CharacterReader类初始化后已经换成了StandardCharsets.UTF_8编码了,此时可以正常解析中文。


http://www.kler.cn/a/234618.html

相关文章:

  • docker镜像源,亲测可用,时间2024-11-14
  • UVC 输出视频格式修改和windows下数据分析
  • 在linux中使用nload实时查看网卡流量
  • 链游系统定制化开发:引领游戏产业的新时代
  • 【计算机网络】Socket编程接口
  • SCUI Admin + Laravel 整合
  • 代码随想录算法训练营第39天(动态规划02● 62.不同路径 ● 63. 不同路径 II
  • 第二节 zookeeper基础应用与实战
  • 知识价值2-什么是IDE?新手用哪个IDE比较好?
  • python:lxml 读目录.txt文件,用 xmltodict 转换为json数据,生成jstree所需的文件
  • 寒假作业5
  • 基于python和matlab的复杂函数拟合的方法、工具以及学习资料
  • 【中间件学习】什么是中间件
  • 【Linux进程间通信】用管道实现简单的进程池、命名管道
  • [AIGC] Tomcat:一个简单 and 高效的 Java Web 服务器
  • 【设计模式】23中设计模式笔记
  • Hadoop:认识MapReduce
  • 【数据结构和算法】--- 基于c语言排序算法的实现(2)
  • Rust变量与常量介绍
  • vue-生命周期+工程化开发(三)
  • RCS系统之:机器人状态
  • 快速搭建 nfs 环境, 解决 nfs 搭建时的疑难杂症
  • C++STL速查手册
  • [NSSCTF]-Web:[SWPUCTF 2021 新生赛]easy_sql解析
  • 为什么IDM下载速度很慢,IDM下载速度很慢怎么办
  • FL Studio如何改变轨道颜色 FL Studio波形颜色如何自定义 flstudio21中文版下载 FL Studio 设置颜色