@ConfigurationProperties和@Value的使用区别

  • 一、@ConfigurationProperties的使用
    • 1. 导入spring-boot-configuration-processor
    • 2. 编写配置文件
    • 3. 定义配置信息类
    • 4. 测试
  • 二、@Value的使用
    • 1. 配置文件
    • 2. 用@Value获取值
    • 3. 测试
  • 三、@ConfigurationProperties和@Value区别

@ConfigurationProperties和@Value都是用来获取配置文件里的配置信息的,在一个项目中,这2种方式都比较常用,根据不同的场景,选择使用它们。

一、@ConfigurationProperties的使用

1. 导入spring-boot-configuration-processor

spring-boot-configuration-processor方便在写配置文件时,有自动提示,首次引入后要启动下项目。

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

2. 编写配置文件

  • 冒号: 一定是英文冒号,其后面有一个空格
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • maps是map类型,{}里是Key: Value
  • lists是列表类型,每个值一行,以- 开头
  • dog是一个对象
  • dogs是对象列表
pigg:person:name: 冬哥age: 33boss: falsebirth: 1989/12/26maps: {k1: v1, k2: v2}lists:- item1- item2- item3dog:name: 小狗age: 3dogs:- {name: 小狗, age: 3}- {name: 小狗2, age: 3}

3. 定义配置信息类

PiggPerson 类,
当我们为属性配置错误的值时,而又不希望 Spring Boot 应用启动失败,我们可以设置 ignoreInvalidFields 属性为 true (默认为 false)

@Data
@Component
@ConfigurationProperties(prefix = "pigg.person", ignoreInvalidFields = true)
public class PiggPerson {private String name;private Integer age;private Boolean boss;private Date birth;private Map<String, Object> maps;private List<Object> lists;private PiggDog dog;private List<PiggDog> dogs;public PiggPerson() {System.out.println("初始化了PiggPerson()");}
}

PiggDog 类

@Data
public class PiggDog {private String name;private Integer age;
}

4. 测试

    @Testvoid getPersonInfo(){System.out.println(person.toString());}

正确获取到配置文件中值。

PiggPerson(name=冬哥, age=33, boss=false, birth=Tue Dec 26 00:00:00 CST 1989, maps={k1=v1, k2=v2}, lists=[item1, item2, item3], dog=PiggDog(name=小狗, age=3), dogs=[PiggDog(name=小狗, age=3), PiggDog(name=小狗2, age=3)])

二、@Value的使用

1. 配置文件

pigg:cat:brand: 加菲猫price: 500

2. 用@Value获取值

可以设置默认值,在key的后面加冒号,比如下面的good属性,如果配置文件里没有配置,默认为true

@Data
@Component
public class PiggCat {@Value("${pigg.cat.brand}")private String brand;@Value("${pigg.cat.price}")private Integer price;//没有配置默认为true@Value("${pigg.cat.good:true}")private Boolean good;
}

3. 测试

    @Testvoid getPiggCat(){System.out.println(cat.toString());}

输出

PiggCat(brand=加菲猫, price=500, good=true)

三、@ConfigurationProperties和@Value区别

  • @ConfigurationProperties能够批量注入配置文件中的属性给bean,而@Valie只能一个个注入。
  • @ConfigurationProperties支持松散绑定,而@Value不支持。
  • @ConfigurationProperties不支持spEL,而@Value支持,例如#{10*20}。
  • @ConfigurationProperties支持JSR303数据校验,而@Value不支持。
  • @ConfigurationProperties支持复杂类型的数据注入,而@Value不支持复杂类型,例如Map

SpringBoot教程(3) @ConfigurationProperties和@Value的使用区别相关推荐

  1. 详细SpringBoot教程之数据访问

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  2. 详细SpringBoot教程之配置文件(一)

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  3. 通俗易懂的SpringBoot教程---day2---Springboot配置文件

    通俗易懂的SpringBoot教程-day2-Springboot配置文件 1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.propertie ...

  4. 通俗易懂的SpringBoot教程---day1---Springboot入门教程介绍

    通俗易懂的SpringBoot教程-day1-教程介绍 教程介绍: 初级教程: 一. Spring Boot入门 二. Spring Boot配置 三. Spring Boot与日志 四. Sprin ...

  5. 详细SpringBoot教程之入门(一)

    写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...

  6. 非常详细的FastDFS整合springBoot教程-带文件下载地址

    FastDFS整合springBoot教程 编写该教程的目的 本教程基于已有的springBoot框架进行整合,springBoot构架部分不做教学 为了给自己做笔记,同时为所需童鞋少爬点坑. 目录 ...

  7. 视频教程- 19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合-Java

    19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有nod ...

  8. SpringBoot教程(二):Maven

    系列文章目录 SpringBoot教程(一):初识SpringBoot SpringBoot教程(二):Maven 目录 系列文章目录 前言 一.什么是Maven? 二.为什么使用Maven? 三.如 ...

  9. 详细SpringBoot教程之缓存开发

    写在前面 这一系列的博文初步都定下来包括SpringBoot介绍.入门.配置.日志相关.web开发.数据访问.结合docker.缓存.消息队列.检索.任务安全.分布式等等一系列的博文,工作量很大,是个 ...

  10. SpringBoot教程(10) Jackson ObjectMapper使用和常用注解

    Jackson ObjectMapper使用和常用注解 一.前言 1. 引入Jackson 二.ObjectMapper 1. 创建ObjectMapper 2. 序列化 2.1 Java对象 转 J ...

最新文章

  1. Java课堂测试——一维数组
  2. 配置整合DWR3.0和Spring2.5使用annotation注解
  3. 【AI学院】新手如何学CV?老司机带学有三书籍《深度学习之图像识别》,赠书8本...
  4. 【openCV学习笔记】在Mac上配置openCV步骤详解
  5. mmap内存映射学习笔记
  6. 内置类型存储空间(32位机参考)
  7. 不依赖任何系统API,用c语言实现gbk/utf8/unicode编码转换
  8. 发现 postman 自动生成接口调用代码的一个问题
  9. 神经网络-反向传播算法
  10. 从request中获取上一个请求的url
  11. java jettison_java – 使用Jettison进行JSON解析
  12. wps xml转换表格_如何转换Excel格式?学会这几招?1键即可完成转换
  13. dedecms仿包图网站素材图片下载站网站源码在线付费+会员系统+积分系统
  14. Error MSB3774 找不到SDK WindowsMobile, Version=10.0.17763.0
  15. 社保管理系统服务器异常,社保费客户端登录服务器异常
  16. 《联盟》读书笔记(三):如何协调员工与公司的目标和价值观
  17. Prometheus学习系列(四十)之报警模板参考
  18. Android开发-弹出对话框
  19. Unity Shader 颜色混合
  20. poj1737 Connected Graph

热门文章

  1. 2023-10-29 游戏开发-CocosCreator游戏资源合集-记录
  2. CV | python使用opencv或matplotlib把多张图片显示在一个窗口内的方法
  3. 标签传递算法:java版
  4. 【每日进步一点点】C语言刷题技巧及训练3
  5. 有哪些信息安全方面的经典书籍?
  6. beego框架mvc流程
  7. 一篇就够!!!Flutter 最全开源项目,从新手到Flutter架构师,(详解UI、导航、网络、导航、音视频...)
  8. python安装Fiona出现Microsoft Visual C++ 14.0 is required.解决方法,及python库安装通用方法
  9. unity读取外部资源
  10. 用自己任意的图片制作适合的Android图标分享