SpringBoot教程(3) @ConfigurationProperties和@Value的使用区别
@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的使用区别相关推荐
- 详细SpringBoot教程之数据访问
写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...
- 详细SpringBoot教程之配置文件(一)
写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...
- 通俗易懂的SpringBoot教程---day2---Springboot配置文件
通俗易懂的SpringBoot教程-day2-Springboot配置文件 1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.propertie ...
- 通俗易懂的SpringBoot教程---day1---Springboot入门教程介绍
通俗易懂的SpringBoot教程-day1-教程介绍 教程介绍: 初级教程: 一. Spring Boot入门 二. Spring Boot配置 三. Spring Boot与日志 四. Sprin ...
- 详细SpringBoot教程之入门(一)
写在前面 鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的 ...
- 非常详细的FastDFS整合springBoot教程-带文件下载地址
FastDFS整合springBoot教程 编写该教程的目的 本教程基于已有的springBoot框架进行整合,springBoot构架部分不做教学 为了给自己做笔记,同时为所需童鞋少爬点坑. 目录 ...
- 视频教程- 19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合-Java
19年录制Redis实战教程 高可用秒杀分布式锁布隆过滤器实战 SpringBoot教程整合 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有nod ...
- SpringBoot教程(二):Maven
系列文章目录 SpringBoot教程(一):初识SpringBoot SpringBoot教程(二):Maven 目录 系列文章目录 前言 一.什么是Maven? 二.为什么使用Maven? 三.如 ...
- 详细SpringBoot教程之缓存开发
写在前面 这一系列的博文初步都定下来包括SpringBoot介绍.入门.配置.日志相关.web开发.数据访问.结合docker.缓存.消息队列.检索.任务安全.分布式等等一系列的博文,工作量很大,是个 ...
- SpringBoot教程(10) Jackson ObjectMapper使用和常用注解
Jackson ObjectMapper使用和常用注解 一.前言 1. 引入Jackson 二.ObjectMapper 1. 创建ObjectMapper 2. 序列化 2.1 Java对象 转 J ...
最新文章
- Java课堂测试——一维数组
- 配置整合DWR3.0和Spring2.5使用annotation注解
- 【AI学院】新手如何学CV?老司机带学有三书籍《深度学习之图像识别》,赠书8本...
- 【openCV学习笔记】在Mac上配置openCV步骤详解
- mmap内存映射学习笔记
- 内置类型存储空间(32位机参考)
- 不依赖任何系统API,用c语言实现gbk/utf8/unicode编码转换
- 发现 postman 自动生成接口调用代码的一个问题
- 神经网络-反向传播算法
- 从request中获取上一个请求的url
- java jettison_java – 使用Jettison进行JSON解析
- wps xml转换表格_如何转换Excel格式?学会这几招?1键即可完成转换
- dedecms仿包图网站素材图片下载站网站源码在线付费+会员系统+积分系统
- Error MSB3774 找不到SDK WindowsMobile, Version=10.0.17763.0
- 社保管理系统服务器异常,社保费客户端登录服务器异常
- 《联盟》读书笔记(三):如何协调员工与公司的目标和价值观
- Prometheus学习系列(四十)之报警模板参考
- Android开发-弹出对话框
- Unity Shader 颜色混合
- poj1737 Connected Graph
热门文章
- 2023-10-29 游戏开发-CocosCreator游戏资源合集-记录
- CV | python使用opencv或matplotlib把多张图片显示在一个窗口内的方法
- 标签传递算法:java版
- 【每日进步一点点】C语言刷题技巧及训练3
- 有哪些信息安全方面的经典书籍?
- beego框架mvc流程
- 一篇就够!!!Flutter 最全开源项目,从新手到Flutter架构师,(详解UI、导航、网络、导航、音视频...)
- python安装Fiona出现Microsoft Visual C++ 14.0 is required.解决方法,及python库安装通用方法
- unity读取外部资源
- 用自己任意的图片制作适合的Android图标分享