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

  1. person.username=xi

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

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

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <optional>true</optional>
  5. </dependency>

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

  1. com.demo.factory.name=Furniture Factory
  2. com.demo.factory.addr=bj sy
  3. com.demo.factory.props.work-time=8:00-20:00
  4. com.demo.factory.props.maintenance-time=3 years
  5.  
  6. com.demo.factory.type[0]=table
  7. com.demo.factory.type[1]=chair
  8. com.demo.factory.type[2]=sofa
  9. com.demo.factory.type[3]=bed
  10.  
  11. 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集合

对应的实体类为

  1. package com.springbootdemo;
  2.  
  3. import java.util.List;
  4. import java.util.Map;
  5.  
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.stereotype.Component;
  8.  
  9. @Component
  10. @ConfigurationProperties("com.demo.factory")
  11. public class Factory {
  12.  
  13. private String name;
  14. private String addr;
  15. private Map<String, String> props;
  16. private List<String> type;
  17. private String desc;
  18.  
  19. public String getName() {
  20. return name;
  21. }
  22.  
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26.  
  27. public String getAddr() {
  28. return addr;
  29. }
  30.  
  31. public void setAddr(String addr) {
  32. this.addr = addr;
  33. }
  34.  
  35. public Map<String, String> getProps() {
  36. return props;
  37. }
  38.  
  39. public void setProps(Map<String, String> props) {
  40. this.props = props;
  41. }
  42.  
  43. public List<String> getType() {
  44. return type;
  45. }
  46.  
  47. public void setType(List<String> type) {
  48. this.type = type;
  49. }
  50.  
  51. public String getDesc() {
  52. return desc;
  53. }
  54.  
  55. public void setDesc(String desc) {
  56. this.desc = desc;
  57. }
  58.  
  59. @Override
  60. public String toString() {
  61. return "Factory [name=" + name + ", addr=" + addr + ", props=" + props + ", type=" + type + "]";
  62. }
  63.  
  64. }

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

  1. package com.springbootdemo;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.CommandLineRunner;
  5. import org.springframework.stereotype.Component;
  6.  
  7. @Component
  8. public class MainBusi implements CommandLineRunner {
  9.  
  10. @Autowired
  11. private Factory factory;
  12.  
  13. @Override
  14. public void run(String... args) throws Exception {
  15. System.out.println(factory);
  16. System.out.println(factory.getDesc());
  17. }
  18.  
  19. }

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

  1. Factory [name=Furniture Factory, addr=bj sy, props={work-time=8:00-20:00, maintenance-time=3 years}, type=[table, chair, sofa, bed]]
  2. 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. webpack4快速上手

    1.在项目根目录cnpm init -y初始化.生成package.json文件 2.在项目里面使用cnpm安装webpack 3.需要在根目录下新建webpack.config.js文件(在其里面配 ...

  2. NET如何使用ELinq-实现增删改查

    1 通过对ELinq主页的参考和学习,以及在项目中(wpf项目中用到的)中应用,ORM框架中的ELinq确实非常的强大,特此以建立wpf项目为例子来总结下如何在项目中应用ELinq,要想使用这个框架首 ...

  3. JS和jQuery用法区别

    目录 JS和jQuery用法区别 外观区别 查找元素 操作标签 操作内容 操作属性 操作位置 操作样式 事件 JS和jQuery用法区别 外观区别 jQuery与JS最直观的区别就是外观上jQuery ...

  4. 万能模拟器eve-ng介绍

    作为一名网络工程师,通过模拟器来搭建实验环境是必不可少的,主流的网络模拟器有如下几款:Packet Tracer是思科公司出的一款模拟器,只能模拟思科自己的设备,由于此款软件是纯软件模拟,所以思科设备 ...

  5. python产生错误:can only concatenate str (not "int") to str

    代码为: #!/usr/bin/python # _*_ coding:utf-8_*_ # print("hello world!") name = input("na ...

  6. Golang等待一组协程结束

    1. 利用waitgroup import ( "log" "sync" "sync/atomic" "time" ) ...

  7. Pc贪吃蛇

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. linux 的常用命令(2)

    tail [必要参数] [选择参数] [文件] | 显示文件结尾内容  -v  显示详细的处理信息-q  不显示处理信息-num/-n (-)num      显示最后num行内容-n +num 从第 ...

  9. bat wmic python 获取进程的所在路径

    bat wmic python 获取进程的所在路径 doc: wmic process where name="process-name" get executablepath w ...

  10. 数字证书注册审批机构(RA)

    1.证书注册审批机构 RA(Registration Authority),数字证书注册审批机构.RA系统是CA的证书发放.管理的延伸.它负责证书申请者的信息录入.审核以及证书发放等工作:同时,对发放 ...