Spring Boot 使用一个全局配置文件,配置文件名是固定的:
- application.properties
- application.yml
YAML(YAML Ain’t Markup Language)
server:
port: 8082
1. YAML语法
1.1 基本语法
- k:(空格)v 表示键值对
- 以空格的缩进控制层级关系
- 属性和值大小写敏感
1.2 值的写法
-
字面量(数字、字符串、布尔)
直接写,字符串默认不用加引号
双引号:不会转义特殊字符
单引号:转义字特殊符 -
对象、Map:
friends : lastName : zs age : 20
friends : (lastName : zs, age : 18)
-
数组(List、Set)
用-
表示数组中的一个元素pets : - cat - dog - pig
pets : [cat, dog, pig]
测试:
person:
...
dog:
name:
...
@Component
@ConfigurationProperties(prefix="person")
public class Person {
...
}
@ConfigurationProperties(prefix="")
告诉SpringBoot将本类中的所有属性和配置文件中的相关配置进行绑定
- prefix 配置文件中那个下面的所有属性进行–映射
<!--导入配置文件处理器,配置文件进行绑定会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
加@Component
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {
@Autowired
Person person;
@Test
public void test() {
System.out.println(person)
}
}
相同配置在 properties:
person.lastName=
...
person.dog.name=
...
使用@Value注入配置值
@Component
public class Person {
@Value("${person.last-name}")
private String lastName;
@Value("#{2*10}")
private int age;
@Value("true")
private boolean boss;
}
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入 | 一个个指定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
复杂类型 | 支持 | 不支持 |
JSR303数据校验 | 支持 | 不支持 |
//JSR303数据校验
@Component
@Validated
public class Person {
...
@Email
private String email;
...
}
person.maps.k1=v1
person.maps.k2=v2
//复杂类型
@Component
public class Person {
...
@Value("person.maps") // 会获取失败
private Map<String, Object> maps;
...
}