本文最后更新于:January 30, 2022 pm
SpringBoot框架中有两个非常重要的策略:开箱即用和约定优于配置。其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
目录
创建SpringBoot项目时,默认使用的是properties文件,而官方更加推荐使用yaml文件。这里简单记录一下三种不同文件的区别。
- properties:key=value
- yaml:key:空格value
- xml:标签式。
yaml简单语法
注意:yaml对空格的控制要求十分高!如下:
以上三种分别表示不同的形式。用包含关系简单表示分别为:a[b、c];a[b[c]];a,b,c
普通键值对
对象形式
行内写法:
| student: {name: aa,age: 2}
|
数组
| student: - one - two - th
|
行内写法:
属性赋值
现在有一个类:entity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| package com.tothefor;
public class entity { private String name; private int age;
@Override public String toString() { return "entity{" + "name='" + name + '\'' + ", age=" + age + '}'; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public entity(String name, int age) { this.name = name; this.age = age; }
public entity() { } }
|
application.yaml
| person: name: loong age: 23
|
然后添加注解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| package com.tothefor;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;
@Component @ConfigurationProperties(prefix = "person") public class entity { private String name; private int age;
@Override public String toString() { return "entity{" + "name='" + name + '\'' + ", age=" + age + '}'; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public entity(String name, int age) { this.name = name; this.age = age; }
public entity() { } }
|
在写注解@ConfigurationProperties时,IDEA会报一个错(其实也不是错,不用管也可以运行,但头部显示红色不舒服。。。)。解决办法:加入一个依赖。
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
|
注解@ConfigurationProperties后的prefix的值是application.yaml中的名称,表示将本类中的所有属性和配置文件中的相关配置进行绑定。会自动去找同名的属性,没有找到了则为null。
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package com.tothefor;
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest class SpringBoot01ApplicationTests {
@Autowired private entity e ;
@Test void contextLoads() { System.out.println(e); }
}
|
最后的输出结果会将配置文件中给的值输出。如:
| entity{name='loong', age=23}
|
默认值
当一个属性没有赋值时,应该使用默认值。
| person: name: ${person.re:loong}_墨水记忆 age: 23
|
name: ${person.re:loong}_墨水记忆
表示:找配置文件中person下的re是否有值,如果没有则使用:
后面的值;有则使用person.re的值。
测试代码同上。
当添加了对应值后:
| person: name: ${person.re:loong}_墨水记忆 age: 23 re: tothefor
|
两次可分别看见区别。
松散绑定
即:如果类中的一个属性名称为:firstName。(驼峰命名)
配置文件中有一个first-name的key,那么,first-name的值就是firstName的值。
即:yml中的first-name就是和类中的firstName一样的。横杠(-)后面跟着的字母默认是大写的。