1、前言
在之前的ssm框架的学习中,我们一般使用xm
l以及properties
进行配置,可以很方便的配置资源。在SpringBoot的学习中,我们还将会学习到另外一种配置方式,那就是使用yaml
进行配置。
2、几种配置方式的区别
xml配置
xml的配置方式使用相当广泛。在原生的JavaWeb阶段,我们用来配置web.xml,在ssm框架的学习中,我们用来配置mybatis-config.xml,Mapper.xml,applicationContext.xml,在Maven,Tomcat…我们随处可以看到xml配置的身影。
xml
配置主要是应用语义化的标签,就像下面那样:
<server>
<port>8080</port>
</server>
properties配置
properties
的配置形式为:
key=value
之前经常使用properties
配置数据库的连接信息,如下:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisdatabase?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=0925
yaml配置
yaml
配置端口号
server:
port: 8080
properties
不适合配置对象的初始化信息,而yaml
在这方面做的比较优秀。
3、 yaml
概述
在SpringBoot中,我们可以使用yaml
与properties
进行配置,而yaml
又是SpringBoot推荐的一种配置方式,下面我们来简单了解一下yaml
。
3.1、yaml
简介
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
3.2、yaml
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
3.3、yaml
配置示例
配置普通的值【数字,布尔值,字符串,日期等】
name: zhangsan
age: 18
happy: true
配置数组
以 - 开头的行表示构成一个数组:
nums:
- 1
- 2
- 3
也可以写作:
nums: [1,2,3]
补充,由于Java的List
底层实现机制是数组,所以List
也可以用这种方式进行配置。
list:
- cat
- dog
配置对象与
Map
对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
也可以使用 key: {key1: value1, key2: value2, ...}
。
还可以使用缩进表示层级关系;
key:
child-key: value
child-key2: value2
较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
意思即对象的属性是一个数组 [complexkey1,complexkey2]
,对应的值也是一个数组 [complexvalue1,complexvalue2]
4、yaml
配置注入
下面我们来写个小案例,在SpringBoot中实现由yaml
注入配置。
新建两个类
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "person")
//声明由yaml进行配置 prefixde值要与yaml中的一致
public class Person {
private String name;
private int age;
private Date birth;
private Map<String, Object> map;
private List<Object> list;
private Dog dog;
}
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {
private String name;
private int age;
}
编写
yaml
在SpringBoot中,配置文件名统一为application
,再加上后缀。
person:
name: zhangsan
age: 19
map: {like: java, lan: java}
list:
- cat
- dog
birth: 2002/09/25
dog:
name: 旺财
age: 18
使用SpringBoot的测试类进行测试
@SpringBootTest
class HelloWorldApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
运行结果:
可以看到我们的值注入成功了。
注意:
- 使用
@ConfigurationProperties(prefix = "person")
注解来引入配置 - LomBok可以很方便的帮我们生成get、set、toString、无参有参构造方法。
- 如果
person
的值为null
,有可能是因为·person·没有进行自动装配,因为SpringBoot毕竟是基于Spring的,我们使用了@Component
注解表明当前类是一个bean,经过@Autowired
自动装配才能实现类中属性的初始化。
5、总结
希望大家在SpringBoot的学习中,能够多使用yaml
这种推荐的配置方式。