一、yaml
spring boot 使用一个全局配置文件,是固定的。可以是application.xml或者application.yaml, 放在/resources或者/config的目录下
- yaml:是一种标记性语言,以数据为中心,比xml和json更适合做配置文件
- XML配置例子:
<server>
<port> 8081</port>
</server>
- yml配置例子:
server:
port: 8085
path: /hello
2.yaml写法
参考语法: https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-yamlsyntax
字面变量: 单个的,不可分的值(数字,字符串,布尔,日期)
对象,Map(key:value键值对):
person:
name: tom
age: 18
personMap:
username: herry
age: 20
person:{name: tom,age: 18}
数组:List,Set
ainamals:
- dog
- cat
- snack
animals:[dog,cat,snack]
三、yaml测试
1.导入配置文件处理器,写配置的时候就有提示
<!-- 导入文件处理器,配置文件进行绑定的时候,就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.java bean
public class Dog {
private String name;
private Integer age;
}
/**
* 将配置文件中的每一个值,映射到这个组件中
*@ConfigurationProperties: 此注解表示告诉sprigboot将本类中的
* 所有属性和配置文件中相关配置进行一一绑定
*prefix = "person" :配置文件中的哪个进行绑定
*@Component: 只有是容器中的组件才会作用
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean boss;
private Date birthday;
private Map<String,Object> map;
private List<Object> list;
private Dog dog;
}
3.配置文件注入
application.yml
person:
name: tom
age: 17
boss: true
birthday: 2018/01/12
map:
k1: v1
k2: v2
list:
- cat
- fish
- dog
dog:
name: goodboy
age: 3
application.properties
#配置properties属性
# idea properties默认是utf-8
person.name=tim
person.age=16
person.boss=false
person.birthday=2014/11/23
person.map.k1=v1
person.map.k2=22
person.list=cat,dog,fish
person.dog.name=goodboy
person.dog.age=3
4.测试类,启动,观察控制台是否打印
/**
* Spring boot 单元测试
*
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootHelloworldQuickApplicationTests {
@Autowired
Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
properties配置文件在idea中默认utf-8可能会乱码
- 语法参考和校验地址:http://www.yaml.org/ https://nodeca.github.io/js-yaml/
-
二、yaml语法规范
1、yaml基本语法
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。空格来控制层级关系
- k:(空格)v:表示一对键值对(空格必须有);
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 大小写敏感
- k: v:字面直接来写
- 字符串:
默然不加上单引号或者双引号
" ": 双引号不转义字符串中的特使字符,特殊字符会作自身表达的意思。如"李" 李四 \n 20岁" 输出:李四 换行 20岁
’ ’ : 单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据。如"李" 李四 \n 20岁" 输出:李四 \n 20岁- 档:多个文档用 - - - 隔开
- 对象是key: value,用冒号分隔
- 冒号后面用空格来分开键值
- 行内写法:
- - 表示数组中的一个元素
- 数组和对象和组合使用
- 行内写法