【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())
        );
    }
}
相关推荐
间彧几秒前
在DDD架构中,如何设计Domain层与Entity层的关系?
后端
间彧1 分钟前
DTO和VO在实际项目中如何避免重复定义?有哪些自动化转换工具推荐?
后端
间彧2 分钟前
SpringBoot项目各层级的详细作用与区分
后端
starxg4 分钟前
bkhtmltopdf - 高性能 HTML 转 PDF 工具(代替 wkhtmltopdf)
java·pdf·html·wkhtmltopdf·htmltopdf
00后程序员6 分钟前
Swoole HTTPS 实战,在生产环境部署、性能权衡与排查流程
后端
尘下吹霜17 分钟前
【鉴权架构】SpringBoot + Sa-Token + MyBatis + MySQL + Redis 实现用户鉴权、角色管理、权限管理
spring boot·mysql·mybatis
程序员爱钓鱼18 分钟前
Python编程实战 · 基础入门篇 | 什么是Python
后端·python
it技术21 分钟前
[入门精通] TLjava高薪扩展训练VIP系列179G69
java
Mintopia22 分钟前
⚡当 Next.js 遇上实时通信:Socket.io 与 Pusher 双雄传
前端·后端·全栈
ZhengEnCi22 分钟前
ObjectUtils.isEmpty 完全指南-从入门到精通的 Java 空值判断利器
java·后端