【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())
        );
    }
}
相关推荐
kfaino17 小时前
码农的AI翻身(三)你好,我叫 Embedding
后端·ai编程
葫芦和十三17 小时前
图解 MongoDB 18|复制集拓扑:Primary、Secondary 和 Arbiter 的分工
后端·mongodb·面试
爱勇宝17 小时前
大多数人不是在使用 AI 赚钱,而是在帮 AI 公司赚钱
前端·后端·程序员
程序员cxuan20 小时前
虽迟但到!GPT-5.6 终于来了!
人工智能·后端·程序员
IT_陈寒1 天前
React的这个渲染问题连官方文档都没说清楚
前端·人工智能·后端
狼爷1 天前
吃透 Java Function 接口,搞定 99% 的 Stream 场景
java·函数式编程
葫芦和十三1 天前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试
葫芦和十三1 天前
图解 MongoDB 16|压缩:snappy、zstd 和 zlib 的取舍
后端·mongodb·面试
苍何1 天前
终于找到免费开源TTS模型,克隆声音不要钱,本地电脑也能跑
后端
用户593608741401 天前
Spring AI 集成 DeepSeek 原生供应商并实现think模式
后端