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
|
@Component @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() {
}
|