ConfigurationProperties 注解的使用

将配置文件中的配置,以属性的形式自动注入到 实体中。
要特别说明的一个注属性
ignoreUnknownFields = false
这个超好用,自动检查配置文件中的属性是否存在,不存在则在启动时就报错。
locations 这个注解属性,不知道为什么不可以使用。用来指定其他配置文件名。

1.application.properties 配置

1
2
3
4
5
#自动配置设置
service.properties.name=my-test-name
service.properties.ip=192.168.1.1
service.user=kayle
service.port=8080

2.对应实体
Properties 就是对应的配置文件中的 properties,注意也要给 get/set
也就是说,配置文件中的前缀是什么, prefix 中就使用什么。成员变量就是对应的配置文件的第二级属性名。

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* Description 测试配置类
*
* @Author liukai
* @Date 2017/7/23.
*/
@Component //不加这个注解的话, 使用@Autowired 就不能注入进去了
@ConfigurationProperties(prefix = "service",ignoreUnknownFields = false)
public class MyConfigTest {

private int port;
private String user;
private Properties Properties;

public static class Properties {
private String name;
private String ip;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getIp() {
return ip;
}

public void setIp(String ip) {
this.ip = ip;
}
}

public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}

public String getUser() {
return user;
}

public void setUser(String user) {
this.user = user;
}

public MyConfigTest.Properties getProperties() {
return Properties;
}

public void setProperties(MyConfigTest.Properties properties) {
Properties = properties;
}
}

3.测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@RestController
public class ConfigurationPropertiesController {

@Autowired
private MyConfigTest myConfigTest;

@RequestMapping("/getProperties")
public String getProperties () {
System.out.println(myConfigTest.getUser());
return myConfigTest.getUser();
}

@RequestMapping("/getObjectProperties")
public Object getObjectProperties () {
System.out.println(myConfigTest.getUser());
return myConfigTest.getProperties();
}
}

4.结果

1
{"name":"my-test-name","ip":"192.168.1.1"}

5.也可修饰配置类方法

1
2
3
4
5
@ConfigurationProperties(prefix = "foo")
@Bean
public FooComponent fooComponent() {

}