项目场景:

项目场景:微服务项目拉取后,本地运行,读取nacos中的配置文件后,导致运行的程序中断。


问题描述

报错:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1

parse data from Nacos error,dataId:shared-spring.yaml,data:spring:
  jackson:
    default-property-inclusion: non_null
  main:
    allow-bean-definition-overriding: true
  mvc:
    pathmatch:
      #解决异常:swagger Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
      #因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher
      matching-strategy: ant_path_matcher

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1


原因分析:

  • Nacos 配置中心在读取和存储 YAML 配置文件时,默认使用的是 UTF-8 编码。
  • 现有的Nacos 配置文件(shared-spring.yaml)中包含了中文注释。
  • 当项目运行或打包启动时,如果 JVM 的默认编码不是 UTF-8,解析器在读取这些中文字符时就会发生乱码,从而抛出上述异常。

Windows 命令行使用的GBK编码格式,Trae中默认会读取。


解决方案:

1、修改.vscode/settings.json

.vscode/settings.json 文件用于配置当前工作区(项目)的特定设置,可以为所有的 Java 调试任务设置统一的默认参数。

在.vscode/settings.json中,添加以下内容:

"java.debug.settings.vmArgs": "-Dfile.encoding=UTF-8 "

如下图所示:
在这里插入图片描述

2、修改.vscode\launch.json

概述:

  • 一般来说,此处的优先级会更高,会更加容易生效。但是,经过多次尝试发现添加的参数都未能生效。所以,以下内容仅供尝试使用,不能保证生效。

在.vscode/launch.json中,添加以下内容:

{
    "type": "java",
    "name": "ExamApplication",
    "request": "launch",
    "mainClass": "com.tianji.exam.ExamApplication",
    "projectName": "tj-exam",
    // 方式一:作为程序参数传入(Spring Boot 推荐)
    "args": ["--spring.profiles.active=local"], 

    // 方式二:作为 JVM 系统属性强制传入
    //"vmArgs": "-Dspring.profiles.active=local" 
}

总结

.vscode/settings.json 文件用于配置当前工作区(项目)的特定设置,可以为所有的 Java 调试任务设置统一的默认参数。

  • 在settings.json 文件中,添加虚拟机参数:
    • “java.debug.settings.vmArgs”: "-Dfile.encoding=UTF-8 ",
  • 即可处理以上问题。

各位再见!这里是 鳄鱼杆的空间,钓……鳄鱼的杆儿!

期待下次再会!

愿你的每一次垂钓之旅都能满载而归。

在这里插入图片描述

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐