最近新搭的一个eureka项目,启动时,会报MalformedInputException这个异常,
百度了很久,网上说的千篇一律,
-
有的说,把yml复制到txt再复制回来
-
有的说,设置idea的utf-8环境
这些根本没有根治这个问题。
下面是这个简单的异常信息
java.lang.IllegalStateException: Failed to load property source from 'file:/D:/IDEA/spring-cloud/sp05-eureka/target/classes/application.yml' (classpath:/application.yml)
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
出现这个的原因,就是解析yml文件时,中文字符集不是utf-8的原因,
但是通过cmd命令,mvn clean compile 后,项目又可以成功运行
找了很久问题,使用eclipse和idea同时测试,最终发现,是maven在项目编译时,默认字符集编码是GBK
一、检查POM文件
我们首先需要在pom文件中设置,编译时编码utf-8即可,如果解决不了进行第二步
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR6</spring-cloud.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
二、修改编码格式
然后重新启动项目!!!!
三、最不应该出现的错误
就是你的application.yml文件是通过把其他类型的文件后缀名直接改为yml生成的,这时就需要你把application.yml中的内容全部复制,然后删除,再新建一个application.yml文件,将复制的内容拷贝进去再运行项目就不会报错了。
四、总结:
这个问题,在一般成熟的项目里面是不会出现的,他一般出现在新建的项目上面,因为一般新建的项目有些配置不够完善,这一块是需要注意的地方。
(完!!!)