最近面试被问到如何获取properties里面的值?我说用@Value,因为我只用过@Value,面试结束以后面试官说也可以使用@ConfigurationProperties,回去学习一下。。。
今天来整理一下,以备以后开发使用。
推荐地址:https://blog.csdn.net/qq_43513205/article/details/86564166
@ConfigurationProperties可以理解为编写一个JavaBean来和配置文件进行映射;如果只想在某个业务逻辑中获取一下配置文件中的某个值,使用@Value;
@ConfigurationProperties的使用
@Data
@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> list;
private Dog dog;
}
@Data
public class Dog {
private String name;
private Integer age;
}
person.properties文件:
person.lastName=hhh
person.age=24
person.birth=2020/5/15
person.boss=true
person.maps.k1=v1
person.maps.k2=v2
person.list=a,b,c,j
person.dog.name=ddd
person.dog.age=12
@Autowired
private Person person;
@Test
public void Test09() {
System.out.println(person);
}
测试结果:
Person(lastName=hhh, age=24, boss=true, birth=Fri May 15 00:00:00 GMT+08:00 2020, maps={k1=v1, k2=v2}, list=[a, b, c, j], dog=Dog(name=ddd, age=12))
注意:person.properties中 person.lastName=hhh、person.last_name=hhh、person.last-name=hhh三种写法都可以。都可以与Person类的属性lastName匹配上。
@Value的使用
@Data
@Component
@PropertySource(value = {"classpath:person.properties"})
public class Person {
@Value("${person.last-name}")
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> list;
private Dog dog;
}
person.last-name=hhh
person.age=24
person.birth=2020/5/15
person.boss=true
person.maps.k1=v1
person.maps.k2=v2
person.list=a,b,c,j
person.dog.name=ddd
person.dog.age=12
@Autowired
private Person person;
@Test
public void Test09() {
System.out.println(person);
}
注意:配置文件中的名称要和value表达式中的一致,否则会报异常:Could not resolve placeholder ‘person.lastName’ in value “${person.lastName}”