目录
问题引入
今天在配置spring boot yaml
文件时,出现了下面的错误:
分析问题
java.lang.IllegalStateException
根据图中的错误信息来看:java.lang.IllegalStateException: failed to load ApplicationContext
,即非法状态异常,加载applicationContext失败。
一般报出这个错误信息有以下几种情况:
数据库配置有误
- 查看mysql数据库服务器是否开启 或数据库信息名称是否匹配
yml配置有误
-
yml配置文件问题,多一个空格或少一个空格,注意:每个冒号后面必须有一个空格。
-
注意注释采用#。
-
文件的编码格式要与项目的编码格式一样,否则会出现编译错误。
ContextConfiguration 配置有误
-
@ContextConfiguration(locations= {“classpath*:application.yml”,“classpath*:logback-spring.xml”})
-
或者是该注解中的配置文件添加不全。
-
或者是该注解配置文件的路径错误。
继续往下看错误信息:mapping values are not allowed here
,因而,可以定位出是yaml
配置有问题。
mapping values are not allowed here
mapping values are not allowed here
,翻译为此处不允许使用映射值,此处是指哪里?是第25行第13列这个地方,即cluster:
出现了错误,不符合yaml
的编写格式,如图所示:
分析yaml配置文件
在解决问题之前,我们应该去了解yaml
文件的书写格式。
yaml编写规则
yaml
语言的文件后缀名为.yml
,和 json 一样是配置文件。
大小写敏感
json
里也是大小写敏感的,这点二者一样。
使用缩进表示层级关系
json
中使用 {}
的嵌套表示层级,而 yml
使用缩进,后者更方便一些。
# 表示注释
json 文件中不允许写注释,如果配置文件很长,全靠字面意思猜挺痛快的,但yaml
可以写注释:
# 服务端口号
server:
port: 8082
yaml数据结构
配置文件十分简洁,与 json 相比,不用频繁的写 {}
和 []
,毕竟换行
和 -
符号更加简洁,字符串也不需要频繁的加引号(无论是单引号还是双引号)。
对象
#application.yml
animal: dogs
homeAddress:
province: 安徽省
city: 阜阳市
county: 利辛县
detail: 东南路1000000000号
转换为 json 为:
{
"animal": "dogs",
"homeAddress": {
"province": "安徽省",
"city": "阜阳市",
"county": "利辛县",
"detail": "东南路1000000000号"
}
}
数组
#application.yml
animals:
- dogs
- cats
- pigs
- ducks
转换为 json 为:
{
"animals": [
"dogs",
"cats",
"pigs",
"ducks"
]
}
字符串
#application.yml
# 正常情况下字符串不用写引号
spring:
datasource:
username: root
password: root
# 字符串内有空格或者特殊字符时需要加引号
spring:
datasource:
url: "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false"
null
#application.yml
#.yml 中 ~ 表示 null
data: ~
转换为 json 为:
{
"data": null
}
解决问题
通过对yaml
文件配置格式的了解,发现cluster
多一个空格,因而报出第25行第13列这里有问题,去除空格即可。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99226.html