SpringBoot配置application.yml时遇到的错误及解决

 更新时间:2024年07月15日 08:41:15   作者:半枝竹  
这篇文章主要介绍了SpringBoot配置application.yml时遇到的错误及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringBoot配置application.yml时遇到错误

控制台报错:

org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed here in 'reader', line 13, column 10:          url: jdbc:mysql://localhost:3306/ho ... 

问题:

driver-class-name与下面的配置项应该是同级的,其他三项前多了空格

此外,application.yml文件中的配置键值对都要用冒号加一个空格隔开键和值

SpringBoot application.yml一些加载规则

SpringBoot是Java后端开发必须掌握的技术栈,而application.yml文件作为SpringBoot的核心配置,我们有必要去搞清楚约定的规则,提高开发效率。

1.application.yml与application.properties加载顺序

当src/main/resources目录下同时存在application.yml和application.properties的时候,两个配置文件中的内容都会被加载。

加载顺序是:

  • 1.application.yml
  • 2.application.properties

假设两个配置文件中存在相同的配置,那么后加载的将会覆盖掉先加载的,可以理解为Map的put操作。

PS:

该加载顺序规则同样适用于application-{profile}.yml和application-{profile}.yml,不过在项目实践中不建议将yml和properties混用,避免后期维护起来困难。

2.src/test/resources/application.yml与src/main/resources/application.yml加载顺序

通常在对SpringBoot应用做单元测试时,会在src/test/resources目录下的新增application.yml,因为测试的配置往往和应用的配置存在差异。

当@SpringBootTest注解标注的类启动Spring上下文时会先加载src/main/resources/application.yml,然后加载src/test/resources目录下的application.yml,当key相同时后加载的配置将覆盖先加载的配置。

3.多环境下的application.yml加载问题

两种方式:

  • 单一application.yml配置方式
spring:
  profiles:
    active: local # 启动哪个环境的配置,---用来设置便捷

---
spring:
  config:
    activate:
      on-profile: local
server:
  port: 8080

---
spring:
  config:
    activate:
      on-profile: product
server:
  port: 8081

---
spring:
  config:
    activate:
      on-profile:  test
server:
  port: 808
  • 多配置文件方式

显然将多个环境的配置放在同一份配置文件中,随着后期配置项的不断增加,整个配置文件的会显得非常臃肿,而且本地配置文件和生产配置文件差异可能也较大,后期不同开发人员维护起来也比较痛苦。

一个好的办法是将一个配置文件拆分成多个配置文件,通过这种方式,每个配置文件中写自己的配置,主配置文件中写清楚用哪一个配置文件就好了,当然如果有些配置项所有环境都一样,也可以将这些配置都维护在主配置文件中。 

多环境配置文件的命名规则为:application-环境名.yml

### application.yml主配置文件
spring:
  profiles:
    active: dev 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java通过自定义类加载器实现类隔离

    Java通过自定义类加载器实现类隔离

    类隔离是一种通过类加载器实现加载所需类的实现方式,使得不同版本类间隔离,避免了使用冲突问题。本文将通过自定义的类加载器实现类隔离,感兴趣的可以了解一下
    2022-08-08
  • SpringBoot中实现多线程6种方式总结

    SpringBoot中实现多线程6种方式总结

    这篇文章主要为大家详细介绍了在Spring Boot中实现多线程的6种方式,文章的示例代码讲解详细,大家可以结合不同场景和需求进行灵活选择
    2025-08-08
  • Spring超详细讲解创建BeanDefinition流程

    Spring超详细讲解创建BeanDefinition流程

    Spring在初始化过程中,将xml中定义的对象解析到了BeanDefinition对象中,我们有必要了解一下BeanDefinition的内部结构,有助于我们理解Spring的初始化流程
    2022-06-06
  • java.nio.file.InvalidPathException异常解决

    java.nio.file.InvalidPathException异常解决

    本人在ubuntu22.04的操作系统上,运行java程序时创建一个文件,由于文件名称中包含了中文,所以导致了程序抛出了java.nio.file.InvalidPathException的异常,感兴趣的可以了解一下
    2025-09-09
  • springboot一个自定义注解如何搞定多线程事务

    springboot一个自定义注解如何搞定多线程事务

    文章介绍了Spring Boot中使用`@Async`注解进行声明式多线程编程的方法,以及如何通过自定义注解和AOP实现多线程事务控制,同时,还解释了`CountDownLatch`的使用场景及其工作原理
    2024-12-12
  • SpringMVC实现前端后台交互传递数据

    SpringMVC实现前端后台交互传递数据

    本篇文章主要介绍了SpringMVC实现前端后台传递数据的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • IntelliJ IDEA中出现

    IntelliJ IDEA中出现"PSI and index do not match"错误的解决办法

    今天小编就为大家分享一篇关于IntelliJ IDEA中出现"PSI and index do not match"错误的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • SpringBoot事务失效的八大原因及解决方案

    SpringBoot事务失效的八大原因及解决方案

    在 Spring Boot 项目开发中,声明式事务管理通过 @Transactional 注解提供了极大的便利,但许多开发者都曾遇到过事务不生效的困扰,本文将详细分析导致 Spring Boot 事务失效的八大常见情况,并提供相应的解决方案,需要的朋友可以参考下
    2025-09-09
  • Java开发中为什么要使用单例模式详解

    Java开发中为什么要使用单例模式详解

    单例对于大家来说并不陌生,但是在什么时候用单例呢?为什么要用呢?本文就带大家了解一下为什么要使用单例,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • maven中仓库的配置与优先级的实现

    maven中仓库的配置与优先级的实现

    本文介绍Maven仓库配置,包括settings.xml和pom.xml中的本地仓库、镜像及profile设置,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07

最新评论