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. JavaScript 的编译原理

    JavaScript 是一门编译语言. JavaScript 的编译是发生在代码执行前的几微米(甚至更短)的事件内,所以 JavaScript 没有其他语言那么多的时间来进行优化. 当 JavaScr ...

  2. springboot 服务端获取前端传过来的参数7种方式

    下面为7种服务端获取前端传过来的参数的方法  1.直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式 这种方式不会校验请求里是否带参数,即下面的userna ...

  3. 使用FindCmdLineSwitch处理命令行参数

    一.四个形式(变体) .function FindCmdLineSwitch(const Switch: string; const Chars: TSysCharSet; IgnoreCase: B ...

  4. weui 注意事项

    个人随笔日记,还请小心采纳为甚 手机移动web开发必须要做的两点: 1.body中加上ontouchstart,即<body ontouchstart>...</body>: ...

  5. C++中volatile

    volatile只保证其“可见性”,不保证其“原子性”. 执行count++;这条语句由3条指令组成: (1)将 count 的值从内存加载到 cpu 的某个 寄存器r: (2)将 寄存器r 的值 + ...

  6. Scala语言基础

    1. Scala语言的特点 a. 多范式编程语言,面向对象(抽象.封装)和函数式(过程.结果)编程 b. 代码简洁 ==>可读性较差 c. 代码会被变异成Java字节码,运行在JVM上 2. S ...

  7. 用例图,ER图,架构图

    用例图 ER图 架构图 注:附上小组画图文档链接  提取码:t7ij v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VM ...

  8. zookeeper不停的拒绝client连接

    1 自己重建了Zookeeper集群,但是之前的应用依赖的事务是前一个Zookeeper的集群的,所以无法识别,重启一下应用就好了

  9. Dockerfile命令详解

    使用docker就会避免不了的要做各种镜像,就会用到dockerfile,记录一下dockerfile的主要命令 1.主要组成部分     dockerfile执行build命令时,是从上倒下依次执行 ...

  10. 十:Razor语法

    1.Razor简介 不是一种代码语言,而是视图中使用的代码引擎. 它以简洁的类似客户端的语法结构,呈现网页服务端代码功能 它替代了ASPX页面的“<%...%>”代码块语法. 在编写时使用 ...