说明
Java 读取yaml文件,有以下方法:
snakeyaml,springboot使用该库
jackson,底层使用snakeyaml,使用 API 与 操作 JSON相同
本文讲解 snakeyaml 使用方法
添加依赖
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.27</version>
</dependency>
例子1
读取 yaml 文件,并返回 Map
yaml配置文件内容
在 resources 目录下创建 application.yml 配置文件,内容如下:
server:
port: 8080
servlet:
context-path: /
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
代码
LoaderOptions options = new LoaderOptions();
options.setAllowDuplicateKeys(false);
Yaml yaml = new Yaml(options);
InputStream inputStream = this.getClass()
.getClassLoader()
.getResourceAsStream(path);
Map<String, Object> map = yaml.load(inputStream);
例子2
将yaml文件解析成javabean
配置文件
userId: 1
username: "lisi"
password: '123456'
address:
province: 山东
city: "济南 : ss"
hobbyList:
- 游泳
- 跑步
代码
import java.io.InputStream;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.yaml.snakeyaml.Yaml;
public class Client {
public static void main(String[] args) {
InputStream resource = Client.class.getClassLoader().getResourceAsStream("User.yaml");
if (Objects.nonNull(resource)) {
Yaml yaml = new Yaml();
User user = yaml.loadAs(resource, User.class);
System.out.println(user.getClass());
System.out.println(user);
}
}
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public static class User {
private String userId;
private String username;
private String password;
private Timestamp createDate;
private Address address;
private List<String> hobbyList;
}
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public static class Address {
private String province;
private String city;
}
}
三条横线将一个文件分成多个配置
配置文件
userId: 1
username: "lisi"
password: '123456'
address:
province: 山东
city: "济南 : ss"
hobbyList:
- 游泳
- 跑步
---
userId: 2
username: "lisi2"
password: '123456'
address:
province: 河南
city: "郑州 : ss"
hobbyList:
- 下棋
- 画画
...
- 在单一文件中,可用连续三个横线
---区分多个文件。 - 还有选择性的连续三个点号
...用来表示文件结尾。
import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
import java.util.Objects;
public class TestYaml {
public static void main(String[] args) {
InputStream resource = TestYaml.class.getClassLoader().getResourceAsStream("User.yaml");
if (Objects.nonNull(resource)) {
Yaml yaml = new Yaml();
Iterable<Object> objects = yaml.loadAll(resource);
for (Object object : objects) {
System.out.println(object);
}
}
}
}
参考:
https://www.cnblogs.com/strongmore/p/14219180.html