yml文件基础及springboot中yml文件常见错误

前言:

当下的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/
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果Spring Boot无法加载application.yml文件,可能是由于以下问题: 1. 文件命名错误:请确保application.yml文件的名称拼写正确,并且它在正确的位置。默认情况下,它应该位于src/main/resources目录下。 2. 文件编码问题:检查application.yml文件的编码格式是否正确。它应该是UTF-8编码,如果不是,尝试将其转换为UTF-8格式。 3. 语法错误:请检查application.yml文件的语法错误,例如缩进、格式错误或无效的配置项。可以尝试逐一注释掉配置项,然后逐渐取消注释以确定问题所在。 4. Maven或Gradle依赖问题:确保您的项目包含正确的Spring Boot依赖。可以通过在pom.xml(或build.gradle)文件添加以下依赖项来使用Spring Boot的配置文件功能: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> ``` 5. Spring Boot配置问题:检查您的配置是否正确。例如,确认您是否正确配置了spring.application.name和server.port等属性。 如果上述方法都无法解决问题,可以尝试重新构建项目,或者尝试将application.yml文件复制到其他位置进行测试。如果问题仍然存在,请检查您的开发环境是否正确配置,并尝试使用其他编辑器或IDE重新创建项目。 ### 回答2: Spring Boot 默认会自动加载 `application.yml` 文件,但有时候可能会出现无法加载的情况。如果遇到无法加载 `application.yml` 的问题,可能由以下几个原因导致: 1. 文件路径不正确:确保 `application.yml` 文件位于正确的路径下。在 Spring Boot ,`application.yml` 文件通常位于 `src/main/resources/` 目录下。 2. 文件名不正确:确保文件名是 `application.yml`,而不是其他命名形式如 `application.yaml` 或 `application.properties`。Spring Boot 默认使用 `.yml` 文件格式作为配置文件。 3. 文件格式错误:确保 `application.yml` 文件的格式正确。`.yml` 文件是使用 YAML 格式编写的,而不是其他格式如 JSON 或 XML。YAML 格式对缩进和空格等要求较严格,需要注意格式的正确性。 4. 依赖问题:检查项目的依赖是否正确配置。如果缺少相关依赖,可能会导致无法加载 `application.yml`。可以通过 Maven 或 Gradle 等构建工具来管理项目的依赖。 5. 配置文件读取问题:可能是由于代码读取配置文件的方式不正确导致。在 Spring Boot ,可以通过 `@ConfigurationProperties` 注解或 `@Value` 注解来读取 `application.yml` 的配置信息。 如果上述方法仍然无法解决问题,可以尝试清理并重新构建项目,或者查看控制台是否有相关的错误或警告信息,以便更准确地判断问题所在。 ### 回答3: Spring Boot没有加载application.yml的原因可能有很多,我将列举几种常见情况: 1. yml文件位置不正确:Spring Boot默认会加载src/main/resources/application.yml文件,如果yml文件放在其他地方或文件名不正确,就无法加载到配置信息。 2. 语法错误yml文件使用的是YAML语言格式,如果文件存在语法错误,例如缩进不正确、冒号(:)后面缺失空格等,也会导致无法加载。 3. 依赖缺失:如果项目的依赖配置不正确,可能无法正确加载yml文件。确保在pom.xml引入了正确的Spring Boot依赖,例如spring-boot-starter-web等。 4. 编码问题:yml文件需要使用UTF-8编码来保存,如果编码格式不正确,也可能导致加载失败。 5. 配置属性名称错误:确保application.yml的配置属性名称和代码的属性名称一致,包括大小写和特殊字符。 解决这个问题的方法是,首先确保yml文件位置、语法、编码等都正确,确认依赖配置也没问题。可以尝试重启项目,清理编译环境,重新构建项目。如果问题仍然存在,可以尝试使用其他方式加载配置,例如使用@PropertySource注解指定特定的配置文件路径或使用@Value注入属性值。另外,可以在启动类上添加@EnableAutoConfiguration注解,确保自动配置生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值