zoukankan      html  css  js  c++  java
  • springboot批量读取参数映射到实体类

    spring读取配置参数可以通过${name}的方式获取,如properties文件中存在如下配置

    person.username=xi

    则可通过${person.username}获取其对应的值xi

    @value("${person.username}")
    private String name;

    但如果参数过多,在使用这种方式配置,就比较麻烦,springboot中新添加了一个注解@ConfigurationProperties,可以批量将配置参数映射到实体类中。添加依赖,如果不加,代码中会给出黄色提示

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <optional>true</optional>
    </dependency>

    假设当前存在一个工厂的配置如下

    com.demo.factory.name=Furniture Factory
    com.demo.factory.addr=bj sy
    com.demo.factory.props.work-time=8:00-20:00
    com.demo.factory.props.maintenance-time=3 years
    
    com.demo.factory.type[0]=table
    com.demo.factory.type[1]=chair
    com.demo.factory.type[2]=sofa
    com.demo.factory.type[3]=bed
    
    com.demo.factory.desc=${com.demo.factory.name} address: ${com.demo.factory.addr}, working time: ${com.demo.factory.props.work-time}, product type includ: ${com.demo.factory.type[1]} 

    其中,desc中使用了当前配置文件中的参数,props可以看成是一个map,type是一个list集合

    对应的实体类为

    package com.springbootdemo;
    
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties("com.demo.factory")
    public class Factory {
    
        private String name;
        private String addr;
        private Map<String, String> props;
        private List<String> type;
        private String desc;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddr() {
            return addr;
        }
    
        public void setAddr(String addr) {
            this.addr = addr;
        }
    
        public Map<String, String> getProps() {
            return props;
        }
    
        public void setProps(Map<String, String> props) {
            this.props = props;
        }
    
        public List<String> getType() {
            return type;
        }
    
        public void setType(List<String> type) {
            this.type = type;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        @Override
        public String toString() {
            return "Factory [name=" + name + ", addr=" + addr + ", props=" + props + ", type=" + type + "]";
        }
    
    }

    测试,实现CommandLineRunner 的类,被纳入到spring管理后,程序启动之后就会执行该类中的run方法

    package com.springbootdemo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MainBusi implements CommandLineRunner {
    
        @Autowired
        private Factory factory;
    
        @Override
        public void run(String... args) throws Exception {
            System.out.println(factory);
            System.out.println(factory.getDesc());
        }
    
    }

    上述两行打印输出的结果如下

    Factory [name=Furniture Factory, addr=bj sy, props={work-time=8:00-20:00, maintenance-time=3 years}, type=[table, chair, sofa, bed]]
    Furniture Factory address: bj sy, working time: 8:00-20:00, product type includ: chair 

    关于配置文件中参数对应到实体类中的属性,springboot有如下规则可参考

  • 相关阅读:
    匿名函数与内置函数(python3入门)
    迭代器和生成器(python3入门)
    python中文件操作方法(python3入门)
    python所有数据类型及操作(python3入门)
    Python语法命令学习-Day3(作业练习)
    Python语法命令学习-Day3(零基础)
    构建之法阅读笔记01
    学习进度条
    软件工程个人作业01
    阅读计划
  • 原文地址:https://www.cnblogs.com/qq931399960/p/11523723.html
Copyright © 2011-2022 走看看