1、YML配置
1.1 YML是什么
YAML (YAML Ain’t a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。
YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。
例如:
student:
name: sangeng
age: 15
<student>
<name>sangeng</name>
<age>15</age>
</student>
1.2 YML的优点
- YAML易于人们阅读。
- 更加简洁明了
1.3 YML语法
-
k: v 表示键值对关系,
冒号后面必须有一个空格
-
使用空格的缩进表示层级关系,空格数目不重要,
只要是左对齐的一列数据,都是同一个层级的
- 大小写敏感
-
缩进时
不允许使用Tab键,只允许使用空格
。 - java中对于驼峰命名法,可用原名或使用-代替驼峰,如java中的lastName属性,在yml中使用lastName或 last-name都可正确映射。
- yml中注释前面要加#
1.4 YML语法示例
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String lastName;
private Integer age;
private Boolean boss;
private Date birthday;
private Map<String,String> maps;
private Map<String,String> maps2;
private List<Dog> list;
private Dog dog;
private String[] arr;
private String[] arr2;
private Map<String,Dog> dogMap;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Dog {
private String name;
private Integer age;
}
student:
lastName: sangeng
age: 15
boss: true
birthday: 2006/2/3
maps:
name: sangeng #多行写法
age: 11
maps2: {name: caotang,age: 199} #行内写法
list:
- name: 小白
age: 3
- name: 小黄
age: 4
- {name: 小黑,age: 1}
dog:
name: 小红
age: 5
arr:
- sangeng
- caotang
arr2: [sangeng,caotang] #行内写法
dogMap:
xb: {name: 小白,age: 9}
xh:
name: 小红
age: 6
1.5 占位符赋值
可以使用
${key:defaultValue}
的方式来赋值,若key不存在,则会使用defaultValue来赋值。
例如
server:
port: ${myPort:88}
myPort: 80
1.6 SpringBoot读取YML
3.6.1@Vaule注解
注意使用此注解只能获取简单类型的值(8种基本数据类型及其包装类,String,Date)
student:
lastName: sangeng
@RestController
public class TestController {
@Value("${student.lastName}")
private String lastName;
@RequestMapping("/test")
public String test(){
System.out.println(lastName);
return "hi";
}
}
注意:加了@Value的类必须是交由Spring容器管理的
3.6.2@ConfigurationProperties注解
yml配置
student:
lastName: sangeng
age: 17
student2:
lastName: sangeng2
age: 15
在类上添加注解@Component 和@ConfigurationProperties(prefix = “配置前缀”)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "student")
public class Student {
private String lastName;
private Integer age;
}
从spring容器中获取Student对象
@RestController
public class TestController {
@Autowired
private Student student;
@RequestMapping("/test")
public String test(){
System.out.println(student);
return "hi";
}
}
注意事项:要求对应的属性要有set/get方法,并且key要和成员变量名一致才可以对应的上。
1.7 YML和properties配置的相互转换
我们可以使用一些网站非常方便的实现YML和properties格式配置的相互转换。
转换网站:
https://www.toyaml.com/index.html
1.8 配置提示
如果使用了@ConfigurationProperties注解,可以增加以下依赖,让我们在书写配置时有相应的提示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
注意:添加完依赖加完注解后要运行一次程序才会有相应的提示。