1、全局配置

SpringBoot的全局配置文件有两种:

  • application.properties
  • application.yml

配置文件的作用:修改SpringBoot自动配置的默认值,主要是默认值,因为SpringBoot启动时会自动加载很多默认配置,详细的可以参考我之前博客源码学习系列之SpringBoot自动配置

2、YAML语言定义

YAML表示YAML Ain’t Markup Language,在百度百科的解释是:

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

所以,我们不用在意它是否是一种标记语言,我们只要记得它是一种以数据为中心的语言就可以,语法非常简洁,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

3、YAML基本语法

引用博客http://www.ruanyifeng.com/blog/2016/07/yaml.html

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

所以YAML基本语法其实就是key:(空格)value的形式,其中空格必须要有,以空格的缩进来控制层级关系,只要对齐的一列数据都是同一个层级的,比如:

server:
port: 8081
path: /example

注意:属性key和值都是大小写敏感的

4、YAML支持的数据结构

  • 字面量:普通的值(整数、浮点数、字符串、布尔、Null值、时间、日期)

    key: value(字面值直接写上就可以)

      字符串也默认不需要加上单引号和双引号的

      单引号:会转义特殊字符,将特殊字符转为一个普通的字符串

      name: 'xiaowang \n' 打印 xiaowang \n (ps:这里的\n被转成字符串)

      双引号:不会转义特殊字符,特殊字符还是表达其本身想表示的意思

      name: 'xiaowang \n' 打印 xiaowang 换行 (ps:这里的\n执行换行操作)

  • 对象:也可以说是map,也就是键值对的形式

    key: value(以对象属性key:value的形式表示,在对象名下一行写属性:属性值,,同样注意空格缩进)

    example:

user:
username: root
password: rootpwd

也可以用行内写法表示:

user:{username: root,password: rootpwd}
  • 数组:也可以说是list或者序列的方式表示

    用"-"符合+值的方式数组中一个元素
pets:
- cat
- dog

显然也有行内写法,用[]中括号表示

pets: [cat,dog]

5、例子实践

ok,上面的都是一些必要的理论,下面开始实践,yaml使用的时候,经常是组合写法的,也就是对象、字面值等等一起组合使用的,本文结合Springboot,介绍一下这种用法,在Springboot中,yaml语言被用于配置属性,这种写法很简洁,值得推广

在Springboot的application.yml文件加上如下配置:

## 测试ConfigurationProperties
user:
userName: root
isAdmin: true
regTime: 2019/11/01
isOnline: 1
maps: {k1 : v1,k2: v2}
lists:
- list1
- list2
address:
tel: 15899988899
name: 上海市

编写测试bean类进行映射


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import java.util.Date;
import java.util.List;
import java.util.Map; /**
* <pre>
* 将配置文件中每个属性都映射到这个组件,注意:记得加@Component注解,这样才能将这个组件 * 加载到Spring容器中
* </pre>
*/
@Component
@ConfigurationProperties(prefix = "user")
public class User { private String userName;
private boolean isAdmin;
private Date regTime;
private Long isOnline;
private Map<String,Object> maps;
private List<Object> lists;
private Address address; @Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", isAdmin=" + isAdmin +
", regTime=" + regTime +
", isOnline=" + isOnline +
", maps=" + maps +
", lists=" + lists +
", address=" + address +
'}';
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public boolean isAdmin() {
return isAdmin;
} public void setAdmin(boolean admin) {
isAdmin = admin;
} public Date getRegTime() {
return regTime;
} public void setRegTime(Date regTime) {
this.regTime = regTime;
} public Long getIsOnline() {
return isOnline;
} public void setIsOnline(Long isOnline) {
this.isOnline = isOnline;
} public Map<String, Object> getMaps() {
return maps;
} public void setMaps(Map<String, Object> maps) {
this.maps = maps;
} public List<Object> getLists() {
return lists;
} public void setLists(List<Object> lists) {
this.lists = lists;
} public Address getAddress() {
return address;
} public void setAddress(Address address) {
this.address = address;
}
}

Address类:

public class Address {
private String tel;
private String name; @Override
public String toString() {
return "Address{" +
"tel='" + tel + '\'' +
", name='" + name + '\'' +
'}';
} public String getTel() {
return tel;
} public void setTel(String tel) {
this.tel = tel;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

写个junit测试类来单元测试:


import org.junit.Test;
import org.junit.runner.RunWith;
import org.muses.jeeplatform.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@org.springframework.boot.test.context.SpringBootTest
public class SpringBootTest { @Autowired
User user; @Test
public void testConfigurationProperties(){
System.out.println(user);
} }
User{userName='root', isAdmin=false, regTime=Fri Nov 01 00:00:00 CST 2019, isOnline=1, maps={k1=v1, k2=v2}, lists=[list1, list2], address=Address{tel='15899988899', name='上海市'}}

测试通过后,idea会提示,

https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/reference/html/configuration-metadata.html#configuration-metadata-annotation-processor

然后,我们加上pom配置就可以

		<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

最新文章

  1. MySQL中find_in_set()和in的区别
  2. XML转JSON
  3. [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
  4. Oracle数据库管理系统下对数据库操作常用命令
  5. Tun/Tap interface tutorial
  6. 关于char 指针变量char *=p;这个语句的输出问题
  7. Android 手动显示和隐藏软键盘
  8. vim温馨提示
  9. QT server服务端如何判断客户端断开连接
  10. javaScript执行环境、作用域链与闭包
  11. Centos7 下安装mysql5.7.17(glibc版)
  12. Python day 05
  13. Leetcode_两数相加_python
  14. ajax原生
  15. systemd 服务介绍
  16. HMM模型学习笔记(维特比算法)
  17. css 兼容性问题,整理
  18. mysql密码忘记解决方案
  19. Reduce Task的学习笔记
  20. django drf JWT

热门文章

  1. Spring框架学习笔记(3)——SpringMVC框架
  2. 自定义TabLayout的Indicator
  3. freemarker属性配置
  4. python 虚拟环境配置
  5. Android中Project、Module的区别
  6. 10个值得深思的_PHP_面试问题
  7. goLang 纳秒转 毫秒 转 英文时间格式
  8. display——table-cell属性
  9. 网页布局——grid弹性网格布局
  10. HDU - 1512  Monkey King