配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties 或 application.yml
application.properties:
- 语法结构 :key=value
application.yml
- 语法结构 :key:空格 value
配置文件的作用 :修改SpringBoot自动配置的默认值
yaml相较于xml
- 可以声明对象,数组。
- 书写形式上接近于JavaScript中对象的写法
- 对空格要求严格,这一点又比较像python
yaml文件更强大的地方在于,可以给实体类直接注入匹配值
注解注入
yaml注入
- 通过@ConfigurationProperties(prefix = “属性名”)注入
- @ConfigurationProperties作用:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
加载指定的配置文件
- 也可以不使用yaml文件进行赋值,可以指定properties文件进行赋值,文件名也没用要求,可以随意取
- 使用properties文件,如果赋值的属性值是中文,可能会出现乱码的情况,可以设置编码格式。
配置文件占位符
- 配置文件还可以编写占位符生成随机数
对比小结
- @Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比
— | @ConfigurationProperties | @Value |
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 支持 |
- 1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
- 2、松散绑定:在一般的配置文件赋值的过程中,要求属性名一一对应,不能出现写错的情况,否则就赋值(注入失败)为空,但是在yaml配置文件中,可以存在中划线和驼峰命名相互传值的情况,例如,在实体类里,属性名为firtName,在yaml文件中对应的属性名可以为first-name,last-name和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
- 3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
- 4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!