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有如下规则可参考

springboot批量读取参数映射到实体类的更多相关文章

  1. Mybaits 源码解析 (八)----- 全网最详细,没有之一:结果集 ResultSet 自动映射成实体类对象(上篇)

    上一篇文章我们已经将SQL发送到了数据库,并返回了ResultSet,接下来就是将结果集 ResultSet 自动映射成实体类对象.这样使用者就无需再手动操作结果集,并将数据填充到实体类对象中.这可大 ...

  2. [转]【MyBatis】Decimal映射到实体类出现科学计数法问题

    原文地址:https://blog.csdn.net/harwey_it/article/details/80269388 问题: Mybatis查询Decimal字段映射到实体类后,出现科学计数法的 ...

  3. Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    阅读目录 1. 通过HttpServletRequest获得请求参数和数据 2. 处理方法形参名==请求参数名 3. 如果形参名跟请求参数名不一样怎么办呢?用@RequestParam注解 4. 用实 ...

  4. 0056 Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    浏览器总会向服务器传递一些参数,那么Spring MVC如何接收这些参数? 先写个简单的html,向服务器传递一些书籍信息,如下: <!DOCTYPE html> <html> ...

  5. JAVA读取EXCEL_自动生成实体类

    代码实现PropertyAnno.java import java.lang.annotation.ElementType; import java.lang.annotation.Retention ...

  6. IntelliJ IDEA 2017版 spring-boot 实现jpa基本部署,通过实体类自动建立数据库

    一.添加Spring Boot JPA-Hibernate步骤 1.在pom.xml添加mysql,spring-data-jpa依赖      2.在application.properties文件 ...

  7. Spring boot 配置文件参数映射到配置类属性

    [参考文章]:SpringBoot之@EnableConfigurationProperties分析 [参考文章]:在Spring Boot中使用 @ConfigurationProperties 注 ...

  8. Gson将参数放入实体类中进行包装之后再传递

    package com.sinoservices.dms.orderinfo.entity; public class OrderDetailKeyCondition { //工单主键 private ...

  9. springboot 使用JPA自动生成Entity实体类的方法

    1. 2. 3.添加数据库 4. 5. 6. 7.点击OK完成. 8.去掉红色波浪线方法. 9.配置数据源 完成!

随机推荐

  1. 【leetcode】617. Merge Two Binary Trees

    原题 Given two binary trees and imagine that when you put one of them to cover the other, some nodes o ...

  2. 第一篇.markdown

    目录 Day 01 1.markdown的使用感受 2.markdown的基本语法 2.1 标题 2.2 加粗 2.3 斜体 2.4 高亮 2.5 上标 2.6 下标 2.7 代码引用(>式) ...

  3. HTML插入地图

    方法/步骤 1.打开“百度地图生成器”的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 如下图: 2.在“1.定位中心点”中,切换城市,并 ...

  4. IIS教程:因权限问题被拒绝访问的解决方案

    https://blog.csdn.net/a497785609/article/details/49952281 写了一个类IISAdmin,负责建立.设置.删除虚拟目录,发现在web中调用,遇到权 ...

  5. Python3+Appium学习笔记03-启动app

    这个是appium相关的官方api地址:http://appium.io/docs/en/about-appium/api/ 如同selenium进行自动化测试时,需要先创建一个浏览器实例一样.在使用 ...

  6. iOS的VideoToolBox与Android的MediaCodec对PTS的处理异同

    视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的.比如1 2 3 4 5,5帧视频数据,1编码成I帧,2 3 4编码成B帧,5编码成P帧. 编码过程: 1. ...

  7. mybatis分页未明确的列定义

    问题出现原因是 集成mybaits时 会自动加上 select tmp_page.*, rownum row_id from ( abc )tmp_page 我的问题是 abc区域的列名有重名的,保持 ...

  8. 【数位贪心】loj#530. 「LibreOJ β Round #5」最小倍数

    记录一下题解里写的算法四 题目描述 $1 \le T \le 10^4,1\le m\le 100,0\le a_i\le 10^{18}$. 题目分析 题解里的算法四是这么写的 主要是这个$\alp ...

  9. 干货 | 以太坊Mist负责人教你建立无服务器应用

    作者:Alex Van de Sande译者:王建/蔡佳慧译者介绍: 王建:万云平台区块链技术专家,拥有多年应用系统架构经验,目前在区块链落地方面进行积极探索 蔡佳慧:万云平台实习生,区块链技术爱好者 ...

  10. BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)

    题意 分析 将区间异或和转化为前缀异或和.那么[L,R][L,R][L,R]的异或和就等于presum[R] xor presum[L−1]presum[R]\ xor \ presum[L-1]pr ...