将配置文件中的配置,以属性的形式自动注入到 实体中。
要特别说明的一个注属性
ignoreUnknownFields = false
这个超好用,自动检查配置文件中的属性是否存在,不存在则在启动时就报错。
locations 这个注解属性,不知道为什么不可以使用。用来指定其他配置文件名。
1.application.properties 配置
#自动配置设置
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 中就使用什么。成员变量就是对应的配置文件的第二级属性名。
/**
* 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.测试
@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.结果
{"name":"my-test-name","ip":"192.168.1.1"}
5.也可修饰配置类方法
@ConfigurationProperties(prefix = "foo")
@Bean
public FooComponent fooComponent() {
}