Java 获取 YAML 配置值

YAML(YAML Ain't Markup Language)是一种用于序列化数据的格式,它以人类可读的方式表达结构化数据。近年来,YAML 在配置文件中的使用越来越广泛,因为它比传统的 XML 和 Properties 文件更加简洁、易读,并且支持多种数据类型。

在 Java 中,我们通常使用第三方库来读取和解析 YAML 配置文件,如 SnakeYAML、Jackson 等。本文将介绍如何使用 SnakeYAML 在 Java 中获取 YAML 配置值,并提供相应的代码示例。

SnakeYAML

SnakeYAML 是一个功能强大的 Java 库,用于解析和生成 YAML 格式的数据。它提供了简单易用的 API,可以帮助我们读取和处理 YAML 文件。

在使用 SnakeYAML 之前,我们需要将其添加到项目的依赖中。以下是 Maven 项目的示例 pom.xml 文件:

<dependencies>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.29</version>
    </dependency>
</dependencies>

读取 YAML 文件

首先,我们需要有一个 YAML 配置文件。假设我们有一个名为 config.yml 的文件,内容如下所示:

server:
  host: localhost
  port: 8080
database:
  url: jdbc:mysql://localhost:3306/mydb
  username: root
  password: secret

我们的目标是从 Java 代码中获取这些配置值。

首先,我们需要创建一个 Java 类来表示配置文件的结构。以下是一个示例类 Config

public class Config {
    private ServerConfig server;
    private DatabaseConfig database;

    public ServerConfig getServer() {
        return server;
    }

    public void setServer(ServerConfig server) {
        this.server = server;
    }

    public DatabaseConfig getDatabase() {
        return database;
    }

    public void setDatabase(DatabaseConfig database) {
        this.database = database;
    }
}

public class ServerConfig {
    private String host;
    private int port;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

public class DatabaseConfig {
    private String url;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

在上面的代码中,我们定义了一个 Config 类来表示整个配置文件的结构。Config 类包含了 ServerConfigDatabaseConfig 类的实例,分别表示服务器和数据库的配置。

接下来,在 Java 代码中读取并解析 YAML 文件。以下是一个示例方法 loadConfig()

import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) {
        Config config = loadConfig("config.yml");
        System.out.println("Server host: " + config.getServer().getHost());
        System.out.println("Server port: " + config.getServer().getPort());
        System.out.println("Database URL: " + config.getDatabase().getUrl());
        System.out.println("Database username: " + config.getDatabase().getUsername());
        System.out.println("Database password: " + config.getDatabase().getPassword());
    }

    public static Config loadConfig(String filePath) {
        try {
            Yaml yaml = new Yaml();
            FileInputStream input = new FileInputStream(filePath);
            return yaml.loadAs(input, Config.class);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

在上面的代码中,我们首先创建了一个 Yaml 实例,然后使用 FileInputStream 打开 YAML 文件。最后,我们使用 loadAs() 方法将 YAML 文件的内容加载为一个 Config 对象。

运行结果

当我们运行上述代码时,将会打印出配置文件中的值:

Server host: localhost
Server port: 8080
Database URL: jdbc:mysql://localhost:3306/mydb
Database username: root
Database password: secret