YAML语法:
命名
YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。 在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言),
YAML是YAML不是一种标记语言的外语缩写;但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
标记语言:以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;
YAML:配置例子
server: port: 8081复制代码
相当于XML:
复制代码 8080
基本语法 k:(空格)v:表示一对键值对(空格必须有); 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server:### 值的写法 port: 8080 path: /hello复制代码
属性和值也是大小写敏感;
值的写法
字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name:"HOWD \n lisi":输出;HOWD 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘HOWD \n lisi’:输出;HOWD \n lisi
对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends: lastName: HOWD age: 21复制代码
行内写法:
friends: {lastName: HOWD,age: 21}复制代码
数组(List、Set):
用- 值表示数组中的一个元素
pets: - cat - dog - pig复制代码
行内写法
pets: [cat,dog,pig]复制代码
配置文件值注入
配置文件 application.yml
person: lastName: hello age: 20 boss: true birth: 2018/09/28 maps: {k1: v1,k2: 12} lists: - bin - zhaoliu dog: name: dog age: 12复制代码
javaBean:
/** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; * prefix = "person":配置文件中哪个下面的所有属性进行一一映射 * * 只有这个组件是容器中的组件,才能给容器提供的@ConfigurationProperties功能; * */@Component@ConfigurationProperties(prefix = "person")public class Person { private String lastName; private Integer age; private Mapmaps; private List
我在上一篇properties中有有说到当你是使用使用 @ConfigurationProperties 注解在idea会给我们提示,需要导入配置文件处理器。
在pom导入配置文件处理器,以后编写配置就有提示了:
复制代码 org.springframework.boot spring-boot-configuration-processor true
properties配置文件在idea中默认utf-8可能会乱码
@Value获取值和@ConfigurationProperties获取值比较
@Value是以前spring底层的,使用@Value需要一个一个参数指定,@ConfigurationProperties批量注入配置文件中的属性。更多比较如下:
班级 | @ConfigurationProperties | @Value |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
配置文件注入值数据校验
@Validated
@ConfigurationProperties支持JSR303数据校验,@Value不支持JSR303数据校验。
@Component@ConfigurationProperties(prefix = "person")@Validatedpublic class Person { /** ** * */ //lastName必须是邮箱格式 // @Email //@Value("${person.last-name}") private String lastName; //@Value("#{11*2}") private Integer age; //@Value("true") private Boolean boss;}复制代码
@PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置文件;
person.properties
person.last-name=hfbinperson.age=23person.boss=true复制代码
Person.java
@PropertySource(value = { "classpath:person.properties"})@Component@ConfigurationProperties(prefix = "person")public class Person { private String lastName; private Integer age; private Boolean boss;}复制代码
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效;
@ImportResource(locations = { "classpath:beans.xml"})导入Spring的配置文件让其生效复制代码
再来编写Spring的配置文件
复制代码
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
1、配置类 @Configuration ------>Spring配置文件
2、使用 @Bean 给容器中添加组件
/** * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件 * * 在配置文件中用标签添加组件 * */@Configurationpublic class MyAppConfig { //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名 @Bean public HelloService helloService02(){ System.out.println("配置类@Bean给容器中添加组件了..."); return new HelloService(); }}复制代码
感谢你花时间读到结尾!:D
后端一枚,默默搬砖撸代码,如果觉得不错欢迎关注我的公众号