springboot配置
yaml可以直接给实体类赋值
实体类
/**
@ConfigurationProperties的作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
参数prefix = "person":将配置文件中的person下面的所有属性一一对应
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
*/
@Component
//@ConfigurationProperties(prefix = "person")
//javaconfig 绑定我们配置文件的值,可以采用这些方式!
//加载指定的配置文件
//@PropertySource(value = "classpath:fengte.properties")
@ConfigurationProperties(prefix = "person")
public class Person implements Serializable {
//SPEL表达式取出配置文件的值
// @Value("${name}")
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> map;
private List<Object> lists;
private Dog dog;
yaml文件
person:
name: 冯特${random.uuid}
age: 18
happy: true
Date: 2020/3/10
map: {k1: v1,k2: v2}
hello: aaa
lists:
- code
- music
- gril
dog:
name: ${person.hello:hello}_旺财
age: 3
测试类输出person.toString():
Person{name='冯特f6c6eb5d-1e39-420c-9f68-aacc8d83f214', age=18, happy=true, birth=null, map={k1=v1, k2=v2}, lists=[code, music, gril], dog=User{name='aaa_旺财', age=3}}
推荐使用yaml配置
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303的数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- cp只需要写一次即可,value需要每个字段都添加
- 松散绑定:如yml中写的last-name,这个和lastName是一样的,后面跟着的字母默认的是大写的,这就是松散绑定
- JSR303的数据校验,这个就是我们可以在字段是增加一层过滤器验证,可以保证数据的合法性
- 复发类型的封装,yml中可以封装对象,使用@value就不支持
JSR303的数据校验
@Validated//数据校验
public class Person implements Serializable {
//SPEL表达式取出配置文件的值
// @Value("${name}")
@Email(message = "邮箱格式错误")
private String lastName;
多环境配置及配置文件位置
读取配置文件优先级
- file:./config/
- file:./
- classpath:/config/
- classpath:/(默认)