引言

Spring Boot从配置文件中取值的方式有两种,一种是批量注入@ConfigurationProperties,另一种是单独注入@Value。

它们之间除了批量与单独取值的区别之外,还存在着其他一些使用方式,本篇博客将详细讲解这两种注解之间的区别和使用方式。

一、区别比较

注:

松散绑定,指配置文件中的属性名与Bean中的属性名大小写不完全一致,但是字母相同的情况。

比如bean中可以是Birth_day,配置文件(yaml)中是 bir-thday、或 BIRTH_DAY、或b-i-r-t-h-d-a-y等。

SpEL,指的是spring 表达式,格式:#{SpEL expression} ,如:#{2 * 10}

JSR303数据校验,Jsr-303是一种注解方式的数据校验,可以通过标记在属性上来判断从配置文件中映射的值是否符合我们的要求,如@NotNull字段不允许为空、@Email字段格式必须是电子邮件,这些注解一般都被放在javax.validation.constraints包下,并且除了将这些校验注解标记在属性上,另外还需要在被校验的类上标记@Validated注解(org.springframework.validation.annotation包下)才能生效。

复杂类型,指对象、Map、List等,相对的是简单类型如:字符串、数值、日期、布尔等。

二、@Value 使用

如果在 配置文件中有属性配置,可以直接通过@Value注入到目标类中。

@Value("${spring.datasource.url}")
private String url;

三、@ConfigurationProperties 使用

在企业实际开发中,有时候需要一些和业务相关的配置,且配置项较多,于是,我们就可以通过 @ConfigurationProperties 来完成。

与 @Value 的单兵作战不同,@ConfigurationProperties 可以和一个 完整的类进行映射,因此,会通过一个 XxxProperties 类来组织这些配置。

通常,我们会为 @ConfigurationProperties 添加 一个 prefix 属性,这个属性最好与类名的Xxx保持一致:

然后,我们为配置类添加一些属性,并在 配置文件中为它们进行赋值即可。

总结

@ConfigurationProperties和@Value的使用都是比较简单的。首先,最重要的就是前者是批量导入属性,后者是单独导入某一条属性。

他们的区别主要是对一些特性的支持如松散绑定、SpEL、JSR-303数据校验、复杂类型的封装。

关于如何在全局配置文件中定义复杂类型,可以参考另一篇文章《Spring Boot————YAML配置文件》

更多Spring Boot技术分享,可以关注博主,也可以文末留言。

Spring Boot——@ConfigurationProperties与@Value的区别相关推荐

  1. Spring Boot(四)Spring Boot @ConfigurationProperties实例

    Spring Boot @ConfigurationProperties实例 一 . ConfigurationProperties的使用 通常,我们使用@Value注释来逐个注入.propertie ...

  2. Spring Boot @EnableAutoConfiguration和 @Configuration的区别

    Spring Boot @EnableAutoConfiguration和 @Configuration的区别 在Spring Boot中,我们会使用@SpringBootApplication来开启 ...

  3. 2.SpringBoot学习(二)——Spring Boot ConfigurationProperties

    1.简介 1.1 概述 Annotation for externalized configuration. Add this to a class definition or a @Bean met ...

  4. Spring Boot @ConfigurationProperties使用指导

    1.简介 Spring Boot的一个非常有用的功能是外部化配置,并且可以轻松访问属性文件中定义的属性. 我们现在将详细地探索@ConfigurationProperties注释. 2.设置 本文使用 ...

  5. Spring 和 Spring Boot 之间到底有啥区别?

    概述 对于Spring和SpringBoot到底有什么区别,我听到了很多答案,刚开始迈入学习SpringBoot的我当时也是一头雾水,随着经验的积累.我慢慢理解了这两个框架到底有什么区别,相信对于用了 ...

  6. spring揭秘_被问到了! Spring 和 Spring Boot 之间到底有啥区别?

    相信很多小伙伴和我一样,常用Spring 和Spring Boot 但是就是没有研究二者之间到底有什么区别? 今天就来大揭秘 ↓ 概述 对于 Spring和 SpringBoot到底有什么区别,我听到 ...

  7. Spring Boot @ConfigurationProperties注解的使用

    /*** @ProjectName traffic* @ClassName UrlInfo* @Desicription 获取yaml配置文件中的内容* @Author Zhang Xueliang* ...

  8. Spring Boot构建多租户SaaS平台核心技术指南

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 树下魅狐 来源 | oschina.net/r ...

  9. Spring Boot 构建多租户 SaaS 平台核心技术指南

    1. 概述 笔者从2014年开始接触SaaS(Software as a Service),即多租户(或多承租)软件应用平台:并一直从事相关领域的架构设计及研发工作.机缘巧合,在笔者本科毕业设计时完成 ...

最新文章

  1. 本地存储cookie和localStorage区别特点
  2. WinPcap笔记(3):获取已安装设备的详细信息
  3. c语言与64位windows不兼容_微软发布可模拟 64 位 x86 程序的 ARM 版 Windows 10
  4. ES6新特性_ES6中模块暴露数据语法汇总---JavaScript_ECMAScript_ES6-ES11新特性工作笔记043
  5. polybase配置 sql_安装SQL Server 2016时提示“Polybase要求安装Oracle JRE 7更新51或更高版本”错误的解决方式...
  6. 类似于QQ游戏百万人同时在线的服务器架构实现
  7. 解决NSTimer循环引用
  8. centos mysql 主从安装_基于 CentOS Mysql 安装与主从同步配置详解
  9. 关于机器智能,10问达摩院科学家金榕
  10. Android 实现 Alexa App-to-App Account Linking
  11. 进化算法求解TSP问题
  12. 《从0到1》读书笔记第10章“打造帮派文化”第2记: 如何打造一个优秀创业团队
  13. java 判断图片合适,Java 判断图片色彩
  14. spss分析方法-对应分析(转载)
  15. 二级JAVA各章考分分布_catti二级笔译考试题型、分数分布及备考指南
  16. 深圳大数据培训技术分享:Hadoop集群同步
  17. Shell脚本(一)
  18. python全景拼接
  19. 以怎样的态度面对生活 - 读《平凡的世界》
  20. R语言如何绘制桑葚图(28)

热门文章

  1. 在Ruby中使用&运算符(new_array- arr&old_Array)创建数组实例
  2. 【数据结构与算法】通俗易懂说链表
  3. 第一次使用Sourcetree成功上传gitee记录
  4. 《Introduction to Computing Systems: From bits and gates to C and beyond》
  5. NVIDIA Jetson Nano B01 安装Ubuntu 18.04.3 LTS
  6. fastai学习——第二个问题
  7. react实现上传文件进度条功能_React.js 可拖放文件的上传表单(支持多文件和进度显示)...
  8. gnss单频软件接收机应用与编程_GNSS/GPS RTK定位 (手机,无人车定位,无人驾驶,因子图优化)...
  9. linux全过程图解图片,安装 Mandriva Linux全过程《图解》
  10. linux中进程优先级,linux下调整进程优先级