报错信息如下:
2024-07-22 15:06:30.603 ERROR 15136 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : parse data from Nacos error,dataId:service-common-dev.yml,data:javastack:
username: 测试测试测试测试
site: https://www.xxxxxxx.com
org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:218) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1198) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:308) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:248) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:213) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:165) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:155) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:93) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.constructor.BaseConstructor.checkData(BaseConstructor.java:124) ~[snakeyaml-1.29.jar:na]
at org.yaml.snakeyaml.Yaml$1.hasNext(Yaml.java:509) ~[snakeyaml-1.29.jar:na]
最后通过分析发现是nacos客户端获取远程配置过程中由于编码不一致导致,解决思路就是再加载时修改编码,查阅资料发现maven-surefire-plugin 插件可以.所以最终修改方案:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>