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注入配置文件

  1. 在springboot项目中的resources目录下新建一个文件application.yaml

  2. 编写实体类型(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;
    }
    
  3. 在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
    
  4. 编写测试方法,打印类信息

    @SpringBootTest
    class HellowoldApplicationTests {
    	@Autowired
    	private Dog dog;
    
    	@Autowired
    	private Person person;
    
    	@Test
    	void contextLoads() {
    		System.out.println(person);
    	}
    }
    

    类信息打印如下,配置注入成功!

    image-20200929171211865

加载制定配置文件

@PropertySource:加载指定配置文件

@configurationProperties:默认从全局配置文件中获取值

@configuration和@Value对比总结

@Value这个注解使用起来并不友好,需要为每个属性单独注解赋值,比较麻烦。下面是@configurationProperties和@Value注解对比。

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定 支持 不支持
SpEL 不支持 支持
JSP303数据校验 支持 不支持
复杂类型封装 支持 不支持
  1. @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加。
  2. 松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。
  3. JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
  4. 复杂类型封装,yml可以封装对象,但是value不支持

结论

  • 配置yml和配置properties都可以获取到值 , 强烈推荐 yml。
  • 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value。
  • 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
posted @ 2021-02-19 22:47  小白兔云  阅读(65)  评论(0编辑  收藏  举报