SpringBoot官方文档html
配置相关java
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的spring
配置文件的做用 :修改SpringBoot自动配置的默认值,由于SpringBoot在底层都给咱们自动配置好了;数组
YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写。springboot
在开发的这种语言时,YAML 的意思实际上是:"Yet Another Markup Language"(还是一种置标语言)app
YAML A Markup Language :是一个标记语言dom
YAML isnot Markup Language :不是一个标记语言spring-boot
标记语言测试
之前的配置文件,大多数都是使用xml来配置;好比一个简单的端口配置,咱们来对比下yaml和xmlui
yaml配置:
server: prot: 8080
xml配置:
<server> <port>8081<port> </server>
基础语法:
k:(空格) v
以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
注意 :属性和值的大小写都是十分敏感的。例子:
server: port: 8081 path: /hello
字面量:普通的值 [ 数字,布尔值,字符串 ]
k: v
字面量直接写在后面就能够 , 字符串默认不用加上双引号或者单引号;
“” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会做为自己想表示的意思;
好比 : name: "bao\n sq" 输出 : bao换行 sq
'' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符同样输出
好比 : name: ‘bao\n sq’ 输出 : bao\n sq
对象、Map(键值对)
k: v1: v2:
在下一行来写对象的属性和值得关系,注意缩进;好比:
student: name: bao age: 3
行内写法
student: {name: bao,age: 3}
数组( List、set )
用 - 值表示数组中的一个元素,好比:
pets: - cat - dog - pig
行内写法
pets: [cat,dog,pig]
配置文件中添加,端口号的参数,就能够切换端口;
server.port=8081
1. 若是要使用properties配置文件可能导入时存在乱码现象 , 须要在IDEA中进行调整 , 咱们这里直接使用yml文件 , 将默认的 application.properties后缀修改成yml
2. 导入配置文件处理器
<!--导入配置文件处理器,配置文件进行绑定就会有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
3.编写yml 配置文件
person: name: bao age: 3 happy: false birth: 2005/01/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺财 age: 1
4.在SpringBoot的主程序的同级目录下建包,只有这样,主程序才会对这些类生效 ; 咱们建一个pojo的包放入咱们的Person类和Dog类;
package com.bao.springbootdemo03.pojo; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /* @ConfigurationProperties做用: 将配置文件中配置的每个属性的值,映射到这个组件中; 告诉SpringBoot将本类中的全部属性和配置文件中相关的配置进行绑定 参数 prefix = “person” : 将配置文件中的person下面的全部属性一一对应 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能 */ @Component //注册bean @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; //get,set方法 //toString方法 }
记得写上 toString()方法,方便调试输出结果
package com.kuang.springbootdemo03.pojo; public class Dog { private String name; private Integer age; //get、set方法 //toString()方法 }
5.确认无误后,到测试单元中进行测试,看是否注入成功!
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootDemo03ApplicationTests { @Autowired Person person ; @Test public void contextLoads() { System.out.println(person); } }
spring-boot中能够用@validated来校验数据,若是数据异常则会统一抛出异常,方便异常中心统一处理。咱们这里来写个注解让咱们的name只能支持Email格式
@Component //注册bean @ConfigurationProperties(prefix = "person") @Validated //数据校验 public class Person { //@Value("${person.name}") @Email //name必须是邮箱格式 private String name; }
运行结果
会报邮箱格式的错误
使用数据校验,能够保证数据的正确性;
1. @PropertySource :加载指定的配置文件;使用@configurationProperties默认从全局配置文件中获取值;
咱们去在resources目录下新建一个person.properties文件
name=baobao
而后在咱们的代码中指定加载person.properties文件
@PropertySource(value = "classpath:person.properties") @Component //注册bean public class Person { @Value("${name}") private String name; ...... }
随机数
${random.value}、${random.int}、${random.long}、${random.int(10)}等等
占位符引用其余属性的值,若是不存在能够设置默认值
person: name: bao${random.uuid} age: ${random.int} happy: false birth: 2010/02/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: ${person.hello:hello}_狗子 age: 1