解决org.yaml.snakeyaml.scanner.ScannerException问题及yml的java.lang.IllegalStateException的问题

导读:本篇文章讲解 解决org.yaml.snakeyaml.scanner.ScannerException问题及yml的java.lang.IllegalStateException的问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

问题引入

今天在配置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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!