yml文件tab 空格_yml文件基础及springboot中yml文件常见错误

本文介绍了SpringBoot项目中YAML配置文件的基础知识,包括数据格式写法、配置值的获取方式,以及在配置过程中可能遇到的问题,如属性与值之间的冒号后需跟空格、层级关系错误、Tab缩进问题等。同时强调了YAML语法规则中不使用Tab缩进,推荐使用空格,并提供了在线校验工具帮助检测配置文件。
摘要由CSDN通过智能技术生成

前言:

当下的springboot项目中进行基础信息配置除了使用.properties外,springboot还支持 yml格式。(您要是喜欢直接写在代码中也行)

最常见的还是yml格式的配置,今天记录下yml文件的如何配置以及在配置过程中遇见的问题

一、数据格式写法:

格式是在yml文件中以“.”分割的属性名称,该为“: ”和换行。

放个例子大家感受下

//properties格式

spring.datasource.username=root

spring.datasource.password: 123

spring.datasource.url: jdbc:mysql://localhost:3306/ge_data?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC

//yml格式

#mysql

spring:

datasource:

username: root

password: 123

url: jdbc:mysql://localhost:3306/data?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC

注意:

1、在配置文件中的注解格式是   #注解

2、在spring与dataSource是相差两个字母的。(上一级与下一级之间必须是递进关系:表现为差两个字母)

3、在属性与值之间有一个冒号和空格,并不是冒号之后直接书写。

4、application.properties和 application.yml二选一,不要都用,不要折磨Springboot和自己

二、配置后如何取值

1、普通取值 使用 @Value()这个注解

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Value {

String value();

}

例:

@Value("${spring.redis.host}")

private String host;

@Value("${spring.redis.port}")

private int port;

@Value("${spring.redis.timeout}")

private int timeout;

2、如果是pojo对象呢? 使用@ConfigurationProperties 这个注解,最好指定前缀(在yml文件中的层级)

例:

yml中配置一下

user:

username: zwr

age: 23

id: 1

实体类(指定前缀)

@ConfigurationProperties(prefix = "user")

@Data

public class User {

private String username;

private Integer age;

private Integer id;

}

使用

@RestController

@EnableConfigurationProperties({User.class})

public class Yml {

@Autowired

User user;

@RequestMapping("/admin")

public String getUser(){

return user.toString();

}

}

三、配置可能出现的问题

1、 mapping values are not allowed here

原因:属性与值之间除了冒号还有一个空格,空格,仔细检查下是不是没打空格,

例:没有空格idea中它都变色了

2、Could not resolve placeholder 'spring.redis.host' in value "${spring.redis.host}

原因:极大原因是因为层级关系不对而导致的

例:正常的层级关系

不正常的层级关系

3、 while parsing a block mapping

原因:和错误2出现的原因差不多,层级关系不对,导致了解析异常

4、 while scanning for the next token found character '\t(TAB)

原因:缩进有问题,说白了层级关系不对

解决方法:哪行出错了就缩进哪行,敲几下空格试试,保证层级正常

注意我在上面标红的地方,yml配置中使用Tab来缩进确实不符合yml的语法规则,

5、解析文件层级不是自己想要的层级(解决错误4出现的该问题)

笔者出现的问题5的情况如下 标注的地方不对,但是缩进正确的话pool不会被解析为redis.pool

指定redis.pool后正常解析

6、name of an alias node must contain at least one character

例:

属性量不是数字需要加单引号

肉眼很难检测自己配置哪出了问题,建议大家使用在线校验工具校验

https://www.bejson.com/validators/yaml_editor/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值