springboot怎么读取yml文件中的list列表、数组、map集合和对象

发布时间:2023-02-24 11:48:04 作者:iii
来源:亿速云 阅读:218

Spring Boot 怎么读取 YML 文件中的 List 列表、数组、Map 集合和对象

在 Spring Boot 项目中,配置文件通常使用 application.ymlapplication.properties 来存储应用程序的配置信息。YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,常用于配置文件。相比于 properties 文件,YAML 文件的结构更加清晰,支持复杂的数据类型,如列表、数组、Map 集合和对象。

本文将详细介绍如何在 Spring Boot 中读取 YML 文件中的 List 列表、数组、Map 集合和对象,并通过代码示例演示如何实现这些功能。

1. YML 文件的基本结构

在开始之前,我们先来看一下 YML 文件的基本结构。YML 文件使用缩进来表示层级关系,键值对使用冒号 : 分隔。以下是一个简单的 application.yml 文件示例:

app:
  name: MyApp
  version: 1.0.0
  description: This is a sample application.
  authors:
    - Alice
    - Bob
    - Charlie
  settings:
    timeout: 5000
    retry: 3
  database:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

在这个示例中,app 是一个顶级键,它包含了多个子键,如 nameversiondescriptionauthorssettingsdatabase。其中,authors 是一个列表,settings 是一个 Map 集合,database 是一个对象。

2. 读取 YML 文件中的 List 列表

在 YML 文件中,列表可以使用 - 符号来表示。例如,authors 是一个包含三个元素的列表:

app:
  authors:
    - Alice
    - Bob
    - Charlie

要在 Spring Boot 中读取这个列表,我们可以使用 @ConfigurationProperties 注解将配置属性绑定到一个 Java 类中。首先,我们需要创建一个配置类:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private List<String> authors;

    public List<String> getAuthors() {
        return authors;
    }

    public void setAuthors(List<String> authors) {
        this.authors = authors;
    }
}

在这个类中,我们使用 @ConfigurationProperties 注解指定了前缀 app,并将 authors 属性与 YML 文件中的 app.authors 绑定。authors 属性的类型是 List<String>,表示它是一个字符串列表。

接下来,我们可以在 Spring Boot 应用程序中使用 AppConfig 类来访问 authors 列表:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class AppRunner implements CommandLineRunner {

    private final AppConfig appConfig;

    @Autowired
    public AppRunner(AppConfig appConfig) {
        this.appConfig = appConfig;
    }

    @Override
    public void run(String... args) throws Exception {
        List<String> authors = appConfig.getAuthors();
        System.out.println("Authors: " + authors);
    }
}

在这个示例中,AppRunner 类实现了 CommandLineRunner 接口,并在 run 方法中打印了 authors 列表的内容。

3. 读取 YML 文件中的数组

数组与列表类似,都可以用来存储多个元素。在 YML 文件中,数组的表示方式与列表相同,使用 - 符号来表示每个元素。例如:

app:
  tags:
    - Java
    - Spring
    - Boot

要在 Spring Boot 中读取这个数组,我们可以使用与读取列表相同的方式。首先,我们需要在配置类中添加一个数组属性:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private String[] tags;

    public String[] getTags() {
        return tags;
    }

    public void setTags(String[] tags) {
        this.tags = tags;
    }
}

在这个类中,tags 属性的类型是 String[],表示它是一个字符串数组。

接下来,我们可以在 AppRunner 类中访问 tags 数组:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class AppRunner implements CommandLineRunner {

    private final AppConfig appConfig;

    @Autowired
    public AppRunner(AppConfig appConfig) {
        this.appConfig = appConfig;
    }

    @Override
    public void run(String... args) throws Exception {
        String[] tags = appConfig.getTags();
        System.out.println("Tags: " + Arrays.toString(tags));
    }
}

在这个示例中,AppRunner 类打印了 tags 数组的内容。

4. 读取 YML 文件中的 Map 集合

在 YML 文件中,Map 集合可以使用键值对的形式来表示。例如,settings 是一个包含两个键值对的 Map 集合:

app:
  settings:
    timeout: 5000
    retry: 3

要在 Spring Boot 中读取这个 Map 集合,我们可以在配置类中添加一个 Map 属性:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private Map<String, Integer> settings;

    public Map<String, Integer> getSettings() {
        return settings;
    }

    public void setSettings(Map<String, Integer> settings) {
        this.settings = settings;
    }
}

在这个类中,settings 属性的类型是 Map<String, Integer>,表示它是一个键为字符串、值为整数的 Map 集合。

接下来,我们可以在 AppRunner 类中访问 settings Map 集合:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class AppRunner implements CommandLineRunner {

    private final AppConfig appConfig;

    @Autowired
    public AppRunner(AppConfig appConfig) {
        this.appConfig = appConfig;
    }

    @Override
    public void run(String... args) throws Exception {
        Map<String, Integer> settings = appConfig.getSettings();
        System.out.println("Settings: " + settings);
    }
}

在这个示例中,AppRunner 类打印了 settings Map 集合的内容。

5. 读取 YML 文件中的对象

在 YML 文件中,对象可以使用嵌套的键值对来表示。例如,database 是一个包含多个属性的对象:

app:
  database:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

要在 Spring Boot 中读取这个对象,我们可以创建一个嵌套的 Java 类来表示 database 对象。首先,我们需要在配置类中添加一个 Database 类型的属性:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private Database database;

    public Database getDatabase() {
        return database;
    }

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

    public static class Database {
        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;
        }
    }
}

在这个类中,Database 是一个静态内部类,它包含了 urlusernamepassword 三个属性。

接下来,我们可以在 AppRunner 类中访问 database 对象:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class AppRunner implements CommandLineRunner {

    private final AppConfig appConfig;

    @Autowired
    public AppRunner(AppConfig appConfig) {
        this.appConfig = appConfig;
    }

    @Override
    public void run(String... args) throws Exception {
        AppConfig.Database database = appConfig.getDatabase();
        System.out.println("Database URL: " + database.getUrl());
        System.out.println("Database Username: " + database.getUsername());
        System.out.println("Database Password: " + database.getPassword());
    }
}

在这个示例中,AppRunner 类打印了 database 对象的各个属性。

6. 综合示例

为了更全面地展示如何在 Spring Boot 中读取 YML 文件中的 List 列表、数组、Map 集合和对象,我们可以将上述示例整合到一个完整的 Spring Boot 项目中。

6.1 项目结构

首先,我们创建一个 Spring Boot 项目,项目结构如下:

src/main/java/com/example/demo/
    - DemoApplication.java
    - config/
        - AppConfig.java
    - runner/
        - AppRunner.java
src/main/resources/
    - application.yml

6.2 配置文件

application.yml 文件中,我们定义了一个包含 List 列表、数组、Map 集合和对象的配置:

app:
  name: MyApp
  version: 1.0.0
  description: This is a sample application.
  authors:
    - Alice
    - Bob
    - Charlie
  tags:
    - Java
    - Spring
    - Boot
  settings:
    timeout: 5000
    retry: 3
  database:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

6.3 配置类

AppConfig.java 文件中,我们定义了配置类 AppConfig,并将 YML 文件中的配置属性绑定到该类中:

package com.example.demo.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private String name;
    private String version;
    private String description;
    private List<String> authors;
    private String[] tags;
    private Map<String, Integer> settings;
    private Database database;

    // Getters and Setters

    public static class Database {
        private String url;
        private String username;
        private String password;

        // Getters and Setters
    }
}

6.4 启动类

DemoApplication.java 文件中,我们定义了 Spring Boot 应用程序的启动类:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

6.5 运行类

AppRunner.java 文件中,我们定义了 AppRunner 类,并在 run 方法中打印了配置属性的内容:

package com.example.demo.runner;

import com.example.demo.config.AppConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

@Component
public class AppRunner implements CommandLineRunner {

    private final AppConfig appConfig;

    @Autowired
    public AppRunner(AppConfig appConfig) {
        this.appConfig = appConfig;
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("App Name: " + appConfig.getName());
        System.out.println("App Version: " + appConfig.getVersion());
        System.out.println("App Description: " + appConfig.getDescription());

        List<String> authors = appConfig.getAuthors();
        System.out.println("Authors: " + authors);

        String[] tags = appConfig.getTags();
        System.out.println("Tags: " + Arrays.toString(tags));

        Map<String, Integer> settings = appConfig.getSettings();
        System.out.println("Settings: " + settings);

        AppConfig.Database database = appConfig.getDatabase();
        System.out.println("Database URL: " + database.getUrl());
        System.out.println("Database Username: " + database.getUsername());
        System.out.println("Database Password: " + database.getPassword());
    }
}

6.6 运行结果

当我们运行这个 Spring Boot 应用程序时,控制台将输出以下内容:

App Name: MyApp
App Version: 1.0.0
App Description: This is a sample application.
Authors: [Alice, Bob, Charlie]
Tags: [Java, Spring, Boot]
Settings: {timeout=5000, retry=3}
Database URL: jdbc:mysql://localhost:3306/mydb
Database Username: root
Database Password: password

7. 总结

通过本文的介绍,我们了解了如何在 Spring Boot 中读取 YML 文件中的 List 列表、数组、Map 集合和对象。我们使用 @ConfigurationProperties 注解将配置属性绑定到 Java 类中,并通过代码示例演示了如何实现这些功能。

在实际开发中,合理使用 YML 文件和 @ConfigurationProperties 注解可以大大提高配置管理的灵活性和可维护性。希望本文的内容能够帮助你在 Spring Boot 项目中更好地处理配置文件。

推荐阅读:
  1. springboot多环境如何进行动态配置
  2. Spring Boot Rest常用框架注解有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot map yml

上一篇:Java的组合模式怎么实现

下一篇:如何编写SQLMap的Tamper脚本

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》