当前位置: 首页 > article >正文

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

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

配置文件

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

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:

school:
  students:
    - name: John
      age: 20
    - name: Jane
      age: 22
    - name: Bob
      age: 21

配置类

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

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;
        }
    }
}

在服务类中使用

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())
        );
    }
}


http://www.kler.cn/a/349077.html

相关文章:

  • c++的web框架Restbed介绍及在嵌入式Linux下的移植详解
  • 代码随想录(七) —— 二叉树部分
  • 前端性能优化全面指南
  • 一次Fegin CPU占用过高导致的事故
  • QT QML 练习5-平铺btn按键
  • 5G NR UE初始接入信令流程
  • Vulnhub:Me-and-My-Girlfriend-1
  • 深度学习-22-基于keras的十大经典算法之深度神经网络DNN
  • 慢慢来才是最快的方式
  • 住房公积金 计算器-java方法
  • 【Python语言进阶(二)】
  • Ofcms-(java代码审计学习)
  • 红外超声波雷达测距
  • [含文档+PPT+源码等]精品基于Python实现的django图书自助借还系统设计与实现
  • 跨境电商独立站的本地化
  • 遨游智能终端赋能“危急特”场景,力推北斗技术规模化应用!
  • Linux——文件夹文件
  • leetcode二叉树(五)-二叉树层序遍历
  • 基于DCGM+Prometheus+Grafana的GPU监控方案
  • 前端布局与响应式设计综合指南(二)