Springboot 配置文件之 Yaml
一、Springboot 配置文件简介
Springboot 是基于配置进行管理的,由于 Springboot 底层都帮我们配置好了相关的模块,如果我们需要修改自动配置的默认行为该怎么办呢?这个时候我们就需要通过修改Springboot 的配置文件来实现了,Springboot 的默认的全局配置文件有两种,一种是 application.properties ,另外一种是 application.yml(或者application.yaml).这里,我们就简单说一下 Yaml 的简单实用
二、Yaml 的特点及语法
Yaml 是一种以数据为中心的配置文件,里面的配置基本都是数据,很少有类似于 xml 的开、闭标签等无关数据的配置,所以它比 Json、Xml 更适合做配置文件
Yaml 语法格式如下
key:(空格)value
Yaml 是以空格的缩进来控制层级关系的,只要是左对齐的一列数据,代表的是同一层级的.其中 key 和 value 对大小写敏感.例如 server 下的 port 和 path 就是同一层级的数据
1 2 3 | server: port: 8081 path:/hello |
三、Yaml 的值的写法
1、字面量:普通的值(数字、字符串、布尔值)
字符串默认是不用加上单引号或者是双引号的,如果要加上的话,单引号和双引号还是有一点区别的
单引号:例如 name:'xiaomaomao\nhello' 它是不会进行转义的,最终输出的结果就是 xiaomaomao\nhello
双引号:例如 name:"xiaomaomao\nhello" 它会进行转义,最终输出的结果就是 xiaomaomao 换行 hello
1 2 3 | name: xiaomaomao age: 21 height: 157.00 |
2、数组
1 2 3 4 5 6 7 8 | // 基本写法,代表数组 hobby 中有三个元素 LOL、KFC、COFFE hobby: - LOL - KFC - COFFE // 行内写法 hobby: [LOL,KFC,COFFE] |
3、对象和 Map 集合
1 2 3 4 5 6 7 | // 一般写法 name: Husky age: 2 color: gray // 行内写法 {name: Husky,age: 2 ,color: gray} |
4、list 集合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 一般写法 pets: - name: Husky age: 2 color: gray - name: persian age: 3 color: orange // 行内写法 pets: - {name: Husky,age: 2 ,color: gray} - {name: persian,age: 3 ,color: orange} |
四、案例
1、配置文件 resources/config/application.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | person: name: xiaomaomao age: 21 height: 157.00 hobby: - LOL - KFC - COFFE pets: - name: Husky age: 2 color: gray - name: persian age: 3 color: orange featureLevel: clever: 10 lovely: 8 funny: 8 |
2、实体类 Person
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Configuration // 将 person 下级的 key 与实体类中的属性进行映射绑定,并为其注入属性值 @ConfigurationProperties (prefix = "person" ) // 加载指定位置的 properties 配置文件 @PropertySource ( "classpath:config/application.yaml" ) // 该类省略了 set/get 方法 public class Person { // 基本数据类型的属性 private String name; private Integer age; private double height; // 数组 private String[] hobby; // List 集合 private List<Pet> pets; // Map 集合 private Map<String, String> featureLevel; } |
3、实体类 Pet (省略 get/set/toString)
1 2 3 4 5 | public class Pet { private String name; private String age; private String color; } |
4、测试类
1 2 3 4 5 6 7 8 9 10 11 12 | @RunWith (SpringRunner. class ) @SpringBootTest public class Springboot01ApplicationTests { @Autowired private ApplicationContext ioc; @Test public void testProperties() { Person person = ioc.getBean( "person" , Person. class ); System.out.println(person); } } |
5、测试结果
1 2 3 4 5 6 7 8 9 10 11 | Person{ name= 'xiaomaomao' , age= 21 , height= 157.0 , hobby=[LOL, KFC, COFFE], pets=[ Pet{name= 'Husky' , age= '2' , color= 'gray' }, Pet{name= 'persian' , age= '3' , color= 'orange' } ], featureLevel={clever= 10 , lovely= 8 , funny= 8 } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?