一、什么是yaml数据
二、yaml数据格式
1、语法规则:
2、字面值表示方式:
3、数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
总结:
三、yaml数据读取
主要有三种读取方式:
-
单一数据读取:使用@Value配合SpEL读取单个数据,如果数据存在多层级,依次书写层级名称即可;
-
封装数据读取:使用@Autowired注入得到自动封装了全部数据的Environment对象;
-
利用Java对象封装数据,并通过对象实体类读取数据:使用@ConfigurationProperties将配置信息绑定至封装类中,封装类需定义为bean,否则无法注入。
推荐使用第三种方式。
示例:
controller:
@RestController
@RequestMapping("/yaml")
public class Yaml数据读取 {
//单一数据注入
@Value("${country}")
private String country;
@Value("${user.name}")
private String name;
@Value("${likes[1]}")
private String likes1;
@Value("${users[1].age}")
private String age;
@Value("${server.port}")
private String port;
@Value("${tempDir}")
private String tempDir;
//封装数据注入
@Autowired
private Environment environment;
//封装了数据的实体类注入
@Autowired
private MyDatasource myDatasource;
//读取yaml数据中的单一数据
@GetMapping("/one")
public String getOne() {
System.out.println("springboot is running...");
System.out.println("country===>"+country);
System.out.println("name===>"+name);
System.out.println("likes1===>"+likes1);
System.out.println("age===>"+age);
System.out.println("port===>"+port);
System.out.println("tempDir===>"+tempDir);
return "springboot is running...";
}
//以封装至Environment的方式全部读取
@GetMapping("/all")
public String getAll() {
System.out.println("springboot is running...");
System.out.println(environment.getProperty("country"));
System.out.println(environment.getProperty("user.name"));
System.out.println(environment.getProperty("likes[1]"));
System.out.println(environment.getProperty("tempDir"));
return "springboot is running...";
}
//以封装至实体类的方式读取数据
@GetMapping("/pojo")
public String getPojo() {
System.out.println("springboot is running...");
System.out.println(myDatasource);
return "springboot is running...";
}
}
pojo:
/*
创建Java对象封装数据
*/
@Component //Bean化
@ConfigurationProperties(prefix = "datasource") //指定要封装的数据
public class MyDatasource {
private String driver;
private String url;
private String username;
private String password;
@Override
public String toString() {
return "Datasource{" +
"driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getDriver() {
return driver;
}
public MyDatasource setDriver(String driver) {
this.driver = driver;
return this;
}
public String getUrl() {
return url;
}
public MyDatasource setUrl(String url) {
this.url = url;
return this;
}
public String getUsername() {
return username;
}
public MyDatasource setUsername(String username) {
this.username = username;
return this;
}
public String getPassword() {
return password;
}
public MyDatasource setPassword(String password) {
this.password = password;
return this;
}
}
application.yml:
server:
port: 8080
country: china
user:
name: kvno
age: 18
likes:
- game
- music
- sleep
likes2: [game,music,sleep]
users:
- name: zhangsan
age: 18
- name: lisi
age: 17
users2:
-
name: zhangsan
age: 18
-
name: lisi
age: 17
users3: [{name:zhangsan,age:18},{name:lisi,age:17}]
baseDir: c:\win10
# 使用${属性名}引用数据
tempDir: ${baseDir}\temp
# 使用引号包裹的字符串,其中的转义字符 \t 可以生效
tempDir2: "${baseDir}\temp \t1 \t2 \t3"
# 创建Java实体类用于封装下面的数据
# 由spring帮我们加载数据至对象中,需要告知spring取加载目标信息
# 读取数据时直接从spring中获取信息
datasource:
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
username: root
password: mypassword