【SpringBoot】04 初探YAML与配置
什么是YAML?
https://www.cnblogs.com/mindzone/p/12849789.html
复合结构的语法
一个标配JavaBean
public class Person {
    private String name;
    private Integer age;
    private Boolean gender;
    private Date  birth;
    private Map<String,Object> map;
    private List<Object> list;
    private Dog puppy;
// 省略 GETTER & SETTER & ToString
}
组合的DogBean
public class Dog {
    private String name;
    private Integer age;
// 省略 GETTER & SETTER & ToString
}
我们的YAML文件应该这样编写:
person:
name: 杰哥
age: 18
gender: true
birth: 1995/09/05
map:
k1: v1
k2: [1,3,4,7,9]
k3: true
k4: 3.14
language: [C,C++,C#,Java]
puppy:
name: 二哈
age: 3
如何在SpringBoot中绑定JavaBean?
1、打上@ConfigurationProperties注解和前缀属性

2、SpringBoot 配置注解处理器 没有配置?

我们点开【Open Documentation】查看
版本太高都没有文档???
索性更改文档查看【只要修改发行版本】
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/html/configuration-metadata.html#configuration-metadata-annotation-processor

官方告诉我们需要导入这个依赖才能识别我们的yaml文件配置:
【经过测试,并不需要,这个提示警告可以忽视不用管】
3、打上@Componenet注解
【否则初始化异常失败】

4、我们如何证明yaml配置注入到了实例中?
【使用测试类】

运行查看结果
Person{name='杰哥', age=18, gender=true, birth=Tue Sep 05 00:00:00 CST 1995, map={k1=v1, k2={0=1, 1=3, 2=4, 3=7, 4=9}, k3=true, k4=3.14}, list=[C, C++, C#, Java], puppy=null}
由于狗类没有装配注解,顾打印为null
狗类没有单独的写在yaml文件中,因为是组合在Person中的
我们只需要注册到容器中即可

查看人对象的结果

使用SpringBoot的Properties配置来进行编写
【警告!在使用properties配置中文字符内容时,请先查看编码类型】

如果是GBK,很用可能在IDEA控制台输出的字符造成乱码问题
建议全部改为UTF-8,并且,勾选自动适应

配置编写:
person.name = 张三
person.age = 18
person.birth = 1998/09/08
person.gender = false
person.map.k1 = 值1
person.map.k2 = 值2
person.list = Java,C,C++,C#
person.puppy.name = 一条舔狗
person.puppy.age = 1
【注意,这里我并没删除在yml文件中的配置】
打印结果是以properties为准的参数
Person{name='张三', age=18, gender=false, birth=Tue Sep 08 00:00:00 CST 1998, map={k1=值1, k2=值2, k3=true, k4=3.14}, list=[Java, C, C++, C#], puppy=Dog{name='一条舔狗', age=1}}
也就是说SpringBoot优先使用properties的配置注入参数
代替@ConfigurationProperties的注入方法
也可以使用@Value在类中硬编码注入参数
@Value配合SPEL表达式来注入【这是来自Spring的注解】
可以支持的方式【字面量、${} 配置注入,#{}SPEL表达式】
现在我们这样使用
把配置读取的注解注释掉
直接使用@Value来注入

测试

@Value & @ConfigurationProperties的区别?
【以下简称 @V & @CP】
- @CP 用于批量注入,支持松散绑定,不支持SPEL,支持JSR303校验,支持复杂类型封装
- @V 用于单个注入,不支持松散绑定,支持SPEL,不支持JSR303校验,不支持复杂类型封装
- properties 不支持SPEL表达式
- yaml 支持SPEL表达式
【Relaxed Binding】什么是松散绑定?
例如我们的Bean属性标识符是小驼峰:
private String lastName;
@CP注解在配置文件中去匹配这个标识符的时候
可以匹配这些规则的标识符:
- person.lastName
- person.last-name
- person.last_ame
- PERSON_LAST_NAME
JSR303注入校验

详细翻阅的校验注解种类参考:
https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/
https://blog.csdn.net/qq_28867949/article/details/78922520
【JSR303 对 @Value注入的校验是无效的,再三提示!!!】
【SpringBoot】04 初探YAML与配置的更多相关文章
- SpringBoot系列之YAML配置用法
		
1.全局配置 SpringBoot的全局配置文件有两种: application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值,主要是 ...
 - 【Springboot】Springboot整合Jasypt,让配置信息安全最优雅方便的方式
		
1 简介 在上一篇文章中,介绍了Jasypt及其用法,具体细节可以查看[Java库]如何使用优秀的加密库Jasypt来保护你的敏感信息?.如此利器,用之得当,那将事半功倍.本文将介绍Springboo ...
 - 【SpringBoot】SpringBoot配置文件及YAML简介(三)
		
SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改Spr ...
 - SpringBoot:配置文件及自动配置原理
		
西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringBoot ...
 - springboot核心技术(一)-----入门、配置
		
Hello World 1.创建一个maven工程:(jar) 2.导入spring boot相关的依赖 <parent> <groupId>org.springframewo ...
 - SpringBoot基础系列之自定义配置源使用姿势实例演示
		
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
 - Angularjs学习---ubuntu12.04中karma安装配置
		
Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结 karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...
 - Desktop Ubuntu 14.04LTS/16.04科学计算环境配置
		
Desktop Ubuntu 14.04LTS/16.04科学计算环境配置 计算机硬件配置 cpu i5 6代 内存容量 8G gpu GTX960 显存容量 2G(建议显存在4G以上,否则一些稍具规 ...
 - 在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法
		
在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法 对于,在Linux系统下做图像识别,不像在windows下面我们可以利用Matlab中的图像工具箱来实现,我们必须借助Ope ...
 - Ubuntu16.04安装Redis并配置
		
Ubuntu16.04安装Redis并配置 2018年05月22日 10:40:35 Hello_刘 阅读数:29146 Ubuntu16.04安装Redis并配置 1):安装: 1:终端命令下载 ...
 
随机推荐
- JavaSE数组
			
目录 数组 概念 如何创建数组 数组的访问与迭代 二维数组 定义: 数组的声明 数组创建(会自动进行初始换为0) 数组遍历 数组 概念  在Java中,数组是一种用于存储多个相同类型元素的数据结构. ...
 - Lru在Rust中的实现, 源码解析
			
LRU(Least Recently Used)是一种常用的页面置换算法,其核心思想是选择最近最久未使用的页面予以淘汰. LRU算法原理 基本思想:LRU算法基于一个假设,即如果一个数据在最近一段时间 ...
 - MFC 好像不太智能
			
我的想法就是这个MFC可能十靠鼠标和点击啥的偏主力 自己配消息处理函数容易出错,一旦代码坏了,不可逆向寻找失去的代码 多以能用鼠标设计的尽量用用编译器提供的界面去设计 当然啊这个API还是要自己找 这 ...
 - C#.NET Winform承载WCF RESTful  API (硬编码配置)
			
1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...
 - vuex中的数据在页面刷新后数据消失
			
用sessionstorage 或者 localstorage 存储数据 存储: sessionStorage.setItem( '名', JSON.stringify(值) ) 使用: sessio ...
 - nordic—RTC+PPI定时驱动某外设做非单次触发(本次测试为驱动GPIO口做电平翻转)
			
简介:在nordic的开发中使用到RTC时,对于比较通道0/1/2/3的中断来说,如果不进行相关配置(如SDK中例子,使用的RTC比较通道就只能触发一次,不能多次触发),会导致比较中断只进入一次,如果 ...
 - MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程
			
MoneyPrinterPlus是一款使用AI大模型技术,一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上的轻松赚钱工具. 之前有出过一期基本的介绍,但是后台收 ...
 - WPF Canvas在Image 图像上绘图,自适应缩放.
			
效果如图 实现了绘图,自适应缩放 核心代码如下 <Window.InputBindings> <KeyBinding Key="Z" Modifiers=&quo ...
 - 红黑树详细讲解(结合JavaTreeMap)
			
1:红黑树简介 红黑树又称红-黑二叉树,它首先是一颗二叉树,它具体二叉树所有的特性.同时红黑树更是一颗自平衡的排序二叉树.根据二叉查找树的概念可以得出正常情况下查找的时间复杂度为O(log n),但是 ...
 - Java全局唯一ID生成策略
			
在分布式系统中常会需要生成系统唯一ID,生成ID有很多方法,根据不同的生成策略,以满足不同的场景.需求以及性能要求. 1.数据库自增序列 这是最常见的一种方式,利用DB来生成全库唯一ID. 优点: 此 ...