【SpringBoot】application配置文件中的数组配置及绑定

引入问题:application.properties中如何配置多个学生(姓名,年龄),然后如何在springboot中绑定呢

配置文件

配置文件中定义三个学生,包含name和age

properties:

properties 复制代码
school.students[0].name=John
school.students[0].age=20
school.students[1].name=Jane
school.students[1].age=22
school.students[2].name=Bob
school.students[2].age=21

或者yml:

yaml 复制代码
school:
  students:
    - name: John
      age: 20
    - name: Jane
      age: 22
    - name: Bob
      age: 21

配置类

定义一个Java类来保存学生的信息。使用@ConfigurationProperties注解指定属性前缀,并使用@Component或@Configuration注解将其注册为Spring Bean。

clike 复制代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
@ConfigurationProperties(prefix = "school")
public class SchoolProperties {

    private List<Student> students;

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    public static class Student {
        private String name;
        private int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

在服务类中使用

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class SchoolService {

    private final SchoolProperties schoolProperties;

    @Autowired
    public SchoolService(SchoolProperties schoolProperties) {
        this.schoolProperties = schoolProperties;
    }

    public List<SchoolProperties.Student> getAllStudents() {
        return schoolProperties.getStudents();
    }

    public Optional<SchoolProperties.Student> getStudentByName(String name) {
        return schoolProperties.getStudents().stream()
                .filter(student -> student.getName().equalsIgnoreCase(name))
                .findFirst();
    }

    public void printAllStudents() {
        schoolProperties.getStudents().forEach(student -> 
            System.out.println("Name: " + student.getName() + ", Age: " + student.getAge())
        );
    }

    public void printStudentByName(String name) {
        Optional<SchoolProperties.Student> studentOpt = getStudentByName(name);
        studentOpt.ifPresent(student -> 
            System.out.println("Name: " + student.getName() + ", Age: " + student.getAge())
        );
    }
}
相关推荐
CopyLower6 分钟前
Java 性能优化:从原理到实践的全面指南
java·开发语言·性能优化
Bohemian9 分钟前
浅谈Golang逃逸分析
后端·面试·go
ゞ 正在缓冲99%…10 分钟前
leetcode14.最长公共前缀
java·算法·leetcode
用户15294368495917 分钟前
谷歌云代理商:如何配置谷歌云服务器的端口转发?
后端
努力的搬砖人.38 分钟前
Spring Boot集成MinIO的详细步骤
java·spring boot·后端
12lf43 分钟前
4月16号
java
货拉拉技术1 小时前
订单哨兵OrderSentinel平台介绍
javascript·后端·程序员
掉鱼的猫1 小时前
Solon AI MCP Server 入门:Helloworld (支持 java8 到 java24。国产解决方案)
java·mcp
带刺的坐椅1 小时前
Solon AI MCP Server 入门:Helloworld (支持 java8 到 java24。国产解决方案)
java·ai·solon·mcp·mcp-server
阿里云云原生1 小时前
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
java·mcp