Spring Boot 配置
- application.yaml:键: 值
- application.properties:键=值
yaml 属性注入
yaml和xml一样,可以完成属性的注入
创建实体类(测试用)
public class Person {
//普通类型
private String name;
private int age;
//List类型
private List<String> hobby;
//Map类型
private Map<String,Object> cards;
//日期类型
private Date date;
//引用类型
private Dog dog;
}
public class Dog {
private String name;
private int age;
}
在类上加上注解
在类上加上这样的注解
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
...
}
配置yaml
person:
name: lucas
age: 19
hobby:
- 睡觉
- 打游戏
cards: {a: 3222222,b: 122333}
date: 2010/2/2
dog:
name: abc
age: 1
这样属性就能注入成功
yaml的好处
yaml的好处不仅限于配置的简单方便快捷,还表现在支持以下两点
- 松散绑定
- JSR303数据校验
松散绑定
当类中属性名是驼峰命名法,例如:userName
在yaml中可以写成
user-name: lucas
JSR303数据校验
后台进行数据校验
类上需要加上@Validate
注解,然后通过在属性上加上一些相关的注解就可以完成校验
具体说明 :
//空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
//Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
//长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
//日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
Properties属性注入
-
@PropertySource: 加载指定的配置文件
-
**@configurationProperties:**默认从全局配置文件中获取值
@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
@Value("${name}")
private String name;
......
}
配置文件占位符
配置文件甚至可以使用随机数注入
person:
name: qinjiang${random.uuid} # 随机uuid
age: ${random.int} # 随机int
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财
age: 1
yaml 多环境切换
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: pro
通过---
进行分割
通过profiles取名
通过active进行激活
自动配置的原理
-
SpringBoot启动会加载大量的自动配置类
-
我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
-
我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
-
给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
**xxxxAutoConfigurartion:自动配置类;**给容器中添加组件
xxxxProperties:封装配置文件中相关属性