002SpringBoot之YAML详解
一、SpringBoot配置文件
1、两种形式
SpringBoot使用一个全局的配置文件,配置文件名(application
)是固定的。但是有两种形式,如下:
application.properties
application.yml
application.yaml(同上)
2、配置文件作用
修改配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在启动的时候都给我们配置好了,所以我们开箱即用。比如我们不喜欢内置的8080端口呢?或者我们要配数据源呢?等等,这些都需要在这里配置。
二、什么是YAML
1、概念
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言
2、例子
YAML:以数据为中心,比json,xml等更适合做配置文件。
server:
port: 8081
三、YAML语法:
1、基本语法
key:(空格)value:(空格)表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的。
server:
port: 8080
path: /hello
spring:
redis:
timeout: 600
PS:注意以下几点:
1、key:后面有空格(因为折行了,所以有好几个空格)。
2、value:后面有空格。
3、port和path同级别。server和spring同级别。
4、属性和值都大小写敏感。
2、值的写法
2.1、字面量:普通的值(数字,字符串,布尔等等)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2.2、对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
行内写法:
friends: {lastName: zhangsan,age: 18}
PS:不管哪种写法,上面那种驼峰(lastName)的,可以采取两种方式,1:lastName;2:last-name
2.3、数组(List、Set):
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
四、配置文件值注入
1、JavaBean
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件(Person)中
*
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
* prefix:配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件才能使用容器提供的功能(@ConfigurationProperties所提供的功能),
* 所以添加@Component注解,使之成为Spring容器中的组件。
*
* @author chentongwei@bshf360.com 2018-05-17 14:05
*/
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
// 这种驼峰写法在yml里可以用lastName或者last-name,都可以
private String lastName;
private Integer age;
private boolean isBoss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
...省略getter/setter/toString....
PS:好好看注释,该解释的都解释的很到位了。
2、YAML配置文件
person:
lastName: 张三
age: 25
isBoss: false
birth: 2017/12/12
maps: {key1: value1,key2: value2}
lists:
- 雷军
- 乔布斯
- 马云
dog:
name: milly
age: 2
3、测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot02ConfigApplicationTests {
@Autowired
private Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
4、输出结果
Person{lastName='张三', age=25, isBoss=false, birth=Tue Dec 12 00:00:00 CST 2017, maps={key1=value1, key2=value2}, lists=[雷军, 乔布斯, 马云], dog=Dog{name='milly', age=2}}
5、换成Properties
# idea默认使用的是utf8编码的,而properties默认使用ascii编码,所以中文肯定会乱码。
# 解决乱码:File--》Settings--》Editor--》File Encodings==》UTF-8
#person.last-name=张三
#person.age=25
#person.birth=2017/12/15
#person.boss=true
#person.maps.key1=value1
#person.maps.key2=value2
#person.lists=a,b,c
#person.dog.name=dog
#person.dog.age=2
PS:properties会出现乱码。解决properties乱码的办法注释已给出。
五、YAML自动提示
疑问:我知道内置的一些配置会有提示,比如输入server就会有提示。但是输入我们上面自定义的person就完全没提示,怎么办呢?
答案:配置一个依赖就行了,如下:
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
六、广告
-
QQ群【Java初学者学习交流群】:458430385
-
微信公众号【Java码农社区】

- 今日头条号:编程界的小学生