Springboot学习笔记-01-配置文件
配置文件
SpringBoot使用一个全局的配置文件,配置文件名称是固定的
- application.properties
语法结构:key=value - application.yml
语法结构:key: value
配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层进行在佛那个装配。比如我们可以在配置文件中修改Tomcat默认启动端口号。
server.port=8081
yaml
概述
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
基本语法
yaml语法要求严格!
- 空格不能省略。
- 使用缩进来控制层级关系,只要左边对齐一列数据都是同一层级。
- 属性和值都是大小写敏感。
字面量
字面量直接写在后面即可,字符串默认不用加上双引号或者单引号。
k: v
注意:
-
" " 双引号,会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;比如 :name: "kuang \n shen" 输出 :kuang 换行 shen
-
‘ ’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出;比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen
对象、Map(键值对)
#对象、map格式
k:
v1:
v2:
拿student对象进行举例:
student:
name: xingxiaoyun
age: 24
sex: woman
数组(List, Set)
可以使用-值来表示数据中的一个元素,比如:
pets:
- cat
- dog
- pig
行内写法
pets:[cat,dog,pig]
注入配置文件
yaml文件强大之处在于可以为实体类注入匹配值
yaml注入配置文件
-
在springboot项目中的resources目录下新建一个文件application.yaml
-
编写实体类型(Dog, Person)
@Component @Data public class Dog { private String name; private Integer age; }
@Data @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private HashMap<String, Object> map; private List<Object> lists; private Dog dog; }
-
在application.yaml文件中设置配置
person: name: xingxiaoyun${random.uuid} age: ${random.int} happy: true birth: 1996/05/16 map: friendNum: 1 lists: [apple, banana, orange] dog: name: ${person.hello:hello}_wangzi age: 3
-
编写测试方法,打印类信息
@SpringBootTest class HellowoldApplicationTests { @Autowired private Dog dog; @Autowired private Person person; @Test void contextLoads() { System.out.println(person); } }
类信息打印如下,配置注入成功!
加载制定配置文件
@PropertySource:加载指定配置文件
@configurationProperties:默认从全局配置文件中获取值
@configuration和@Value对比总结
@Value这个注解使用起来并不友好,需要为每个属性单独注解赋值,比较麻烦。下面是@configurationProperties和@Value注解对比。
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSP303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加。
- 松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
- JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
- 复杂类型封装,yml可以封装对象,但是value不支持
结论
- 配置yml和配置properties都可以获取到值 , 强烈推荐 yml。
- 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value。
- 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!