【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())
        );
    }
}
相关推荐
YH552698415 分钟前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
AI_小站1 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
普通网友1 小时前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
笃行3501 小时前
向量数据库单独建一套,这笔账划不划算
后端
许彰午1 小时前
03-三种开发模式
java·架构
weixin_431600442 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
Rain的Java大神之路2 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
孙克旭_3 小时前
Docker 镜像构建|Vue+SpringBoot+Go 多语言项目 Dockerfile 案例
linux·运维·vue.js·spring boot·docker·dockerfile
2602_959960923 小时前
谢飞机面试大厂:Spring Boot、JVM、Redis、Kafka、微服务与音视频搜索场景求生实录
java·jvm·spring boot·redis·面试题
Zane1994123 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言