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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- springboot的application.yml配置port不生效的解决方案
- 解决springboot application.yml变灰色的问题
- springboot中application.yml多环境生效规则说明
- SpringBoot中application.yml配置文件的写法
- Springboot application.yml配置文件拆分方式
- 多个springboot项目如何使用一个外部共同的application.yml
- SpringBoot中application.properties、application.yaml、application.yml区别
- SpringBoot项目部署时application.yml文件的加载优先级和启动脚本问题