• springboot读取yml文件中的list列表、数组、map集合和对象


    前言
    springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型,支持类对象类型,下面我们来实战下这些形式的配置如何取值

    application.yml定义list集合

    第一种方式使用@ConfigurationProperties注解获取list集合的所有值

    type:
      code:
        status:
          - 200
          - 300
          - 400
          - 500
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    编写配置文件对应的实体类,这里需要注意的是,定义list集合,先定义一个配置类Bean,然后使用注解@ConfigurationProperties注解来获取list集合值,这里给大家讲解下相关注解的作用

    • @Component 将实体类交给Spring管理
    • @ConfigurationProperties(prefix = “type.code”) 读取yml文件中的list
    • @Data 自动生成getter和setter方法

    如下图所示

    package com.o2o.data;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.List;
    
    @Component
    @ConfigurationProperties(prefix = "type.code") // 配置文件的前缀
    @Data
    public class TypeCodeConfig {
        private List status;
    
        public void setStatus(List status){
            this.status = status;
        }
        public List getStatus(){
            return status;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后在要使用的地方自动注入,我是直接在启动类中读取这个list,需要注意,使用yml中配置的list需要先将对象注入,然后通过get方法读取配置文件中的的值。

    • @Autowired private TypeCodeConfig typeCodeConfig; 使用注解将对象注入
    • System.out.println(typeCodeConfig.getStatus()); 调用getter方法读取值
    package com.o2o;
    
    import com.o2o.data.TypeCodeConfig;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @MapperScan("com.o2o.mapper")
    public class AutoTestApplication implements CommandLineRunner {
    
    	public static void main(String[] args) {
    		SpringApplication.run(AutoTestApplication.class, args);
    	}
    
    	@Autowired
    	private TypeCodeConfig typeCodeConfig;
    
    	@Override
    	public void run(String... args) throws Exception {
    		System.out.println(typeCodeConfig.getStatus());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    启动springboot我们已经从控制台成功读取到yml文件中list集合的所有值了
    在这里插入图片描述
    第二种方式使用@value注解获取list集合的所有值
    yml文件配置如下

    student:
      ids:
        - 7
        - 8
        - 9
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后创建一个实体类

    @Data
    public class Student {
        @Value("${student.ids}")
        private List<Integer> ids;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    再新建一个对list属性的配置类

    @Component
    @ConfigurationProperties(prefix = "student")
    @Data
    public class TypeCodeConfig {
    
    private List<Integer> ids;
    
       public void setIds(List<Integer> ids) {
           this.ids = ids;
       }
          public  List<Integer> getIds(){
           return ids;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在启动类中注入

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @MapperScan("com.o2o.mapper")
    public class AutoTestApplication implements CommandLineRunner {
    
    	public static void main(String[] args) {
    		SpringApplication.run(AutoTestApplication.class, args);
    	}
    
    	@Autowired
    	private TypeCodeConfig typeCodeConfig;
    	
    	@Override
    	public void run(String... args) throws Exception {
    
    		System.out.println(typeCodeConfig.getIds());
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    启动springboot我们已经从控制台成功读取到yml文件中list集合的所有值了
    在这里插入图片描述

    application.yml定义数组类型

    yml配置文件如下图所示

    dataSync:
      enable: true
      type: 
        - "1"
        - "2"
        - "3"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过@value注解获取数组值

    @Value("${dataSync.enable.type}")
     private String[] type;
    
    • 1
    • 2

    也可以通过创建配置类bean,使用@ConfigurationProperties注解获取,如下图所示:

    @Data
    @Component
    @ConfigurationProperties(prefix = "dataSync.enable") // 配置 文件的前缀
    public class InterceptorPathBean
    {  
        private String[] type;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    yml文件还可以存放对象和对象的集合,使用方法与基本类型类似。
    简单举例:

    • 定义map集合配置
    interceptorconfig:
      path:
        maps:
          name: 小明
          age: 24
    
    • 1
    • 2
    • 3
    • 4
    • 5

    通过创建配置类bean,使用@ConfigurationProperties注解获取map值,如下图所示

    @Data
    @Component
    @ConfigurationProperties(prefix = "interceptorconfig.path") // 配置 文件的前缀
    public class InterceptorPathBean
    {
        private Map<String , String> maps;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 使用对象配置
    student:
      id: 1
      name: Bruce
      gender: male
    
    • 1
    • 2
    • 3
    • 4
    • 使用对象集合配置
    students: 
      - id: 1
        name: Bruce
        gender: male
      - id: 2
        name: ...
        ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里我给大家总结一些需要重要的点:

    1、list类型的yml配置文件中,需要使用"-"来组成一个列表集合。
    
    2、yml中的前缀没有层级限制,如果是多层级,比如这里的demo/code,在java类中配置ConfigurationProperties注解的prefix就写作"demo.code"
    
    3、属性名称在yml文件中支持连字符"-",比如four-span,在java类中配置属性就需要转为驼峰式,fourSpan。
    
    4、java类属性需要配置set,get方法。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Java代码的编译过程(没写完,不要点进来)
    Azure Devops Create Project TF400711问题分析解决
    Elasticsearch 认证模拟题 - 21
    Java:实现找出二叉树中两个给定节点的最小公共祖先LCA算法(附完整源码)
    2023博鳌国际地理标志发展大会在海南举办
    VP牛客小白月赛88(A---F)(收获很多)
    顺序表的快慢指针应用:leetcode26、27、88、大数加法989(交换数组)
    【uniapp】关于小程序输入框聚焦、失焦(输入法占位)的问题
    【目标检测】RCNN算法实现
    Git 之 已有项目创建 git 仓库
  • 原文地址:https://blog.csdn.net/weixin_42274846/article/details/128155678