SpringBoot——配置文件(三)

yml 与 properties

我们都会发现在 resource 有一个配置文件 application.properties,也有可能是application.yml.这个文件也就是 Spring Boot 默认的的配置文件。

yml的数据格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 服务启动端口号
server:
port: 8080
# 配置person属性值
person:
last-name: Darcy
age: 20
birth: 2018/01/01
email: gmail@gmail.com
maps:
key1:java
key2:golang
lists:
- a
- b
- c
dog:
name: 旺财
age: 2

properties的数据格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 服务启动端口号
server.port=8080
# 配置属性值(使用IDE进行配置需要处理编码问题,不然中文会发送乱码现象)
person.last-name=张三
person.age=18
person.birth=2018/12/06
person.email=niu@gmail.com
person.maps.key1=c
person.maps.key2=java
person.maps.key3=golang
person.lists=a,b,c,d
person.dog.name=旺财
person.dog.age=1

随机数和占位符

RandomValuePropertySource 类对于注入随机值很有用(例如,注入秘密或测试用例)。它可以生成整数,长整数,uuid 或字符串等,通过 Spring Boot 对我们的封装,我们可以轻松的使用。

占位符允许在配置的值中引用之前定义过的变量。

1
2
3
4
5
6
7
8
9
10
# 生成随机值
bootapp.secret=$ {random.value}
bootapp.number=$ {random.int}
bootapp.bignumber=$ {random.long}
bootapp.uuid=$ {random.uuid}
bootapp.number.less.than.ten=$ {random.int(10)}
bootapp.number.in.range=$ {random.int [1024,65536]}
# 属性的占位符
bootapp.name=SpringBoot
bootapp.description=${bootapp.name}是一个spring应用程序

@ConfigurationProperties

@ConfigurationProperties 注解是 Spring Boot 提供的一种使用属性的注入方法。不仅可以方便的把配置文件中的属性值与所注解类绑定,还支持松散绑定,JSR-303 数据校验等功能。

以上面演示的 Properties 的配置为例演示 @ConfigurationProperties 注解的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Data
@SpringBootConfiguration
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
private String lastName;
@Max(150)
private Integer age;
private Date birth;
private Map<String, String> maps;
private List<String> lists;

/**
* 支持数据校验
*/
@Email
private String email;
}

@Value

@Value 支持直接从配置文件中读取值,同时支持 SpEL 表达式,但是不支持复杂数据类型和数据验证,下面是具体的使用。

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
@Data
@Component
@Validated
public class PersonValue {

/**
* 直接从配置文件读取一个值
*/
@Value("${person.last-name}")
private String lastName;

/**
* 支持SpEL表达式
*/
@Value("#{11*4/2}")
private Integer age;

@Value("${person.birth}")
private Date birth;

/**
* 不支持复杂类型
*/
private Map<String, String> maps;
private List<String> lists;

/**
* 不支持数据校验
*/
@Email
@Value("xxx@@@@")
private String email;
}

通过上面的示例,也可以发现 @ConfigurationProperties 和 @Value的区别:

特征 @ConfigurationProperties @Value
功能 批量注入配置文件属性 一个一个注入
松散绑定(松散的语法) 支持 不支持
SpEL 不支持 支持
JSR-303 数据校验 支持 不支持
复杂类型 支持 不支持

@PropertySource

随着业务复杂性的增加,配置文件也越来越多,我们会觉得所有的配置都写在一个 properties 文件会使配置显得繁杂不利于管理,因此希望可以把映射属性类的配置单独的抽取出来。

这时可以使用 @PropertySource 注解来指定要读取的配置文件。

如果抽取 person 配置为单独文件 person.properties:

1
2
3
4
5
6
7
8
person.last-name=张三
person.age=18
person.birth=2018/12/06
person.email=niu@gmail.com
person.maps.key1=c
person.maps.key2=java
person.maps.key3=golang
person.lists=a,b,c,d

配置类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Data
@Component
@Validated
@PropertySource(value = "classpath:person.properties")
@ConfigurationProperties(value = "person")
public class PersonSource {
private String lastName;
private Integer age;
private Date birth;
private Map<String, String> maps;
private List<String> lists;

/**
* 支持数据校验
*/
@Email
private String email;
}
文章目录
  1. 1. yml 与 properties
  2. 2. 随机数和占位符
  3. 3. @ConfigurationProperties
  4. 4. @Value
  5. 5. @PropertySource
|