@ConfigurationProperties給屬性映射值
編寫JavaBean
/*
* 將配置文件application.properties中配置的每一個屬性值映射到當前類的屬性中;
* @ConfigurationProperties:告訴springboot將本類中所有屬性和配置文件中相關的配置進行綁定;
* prefix="person":指出將配置文件中person下的所有屬性進行一一映射;
*
* 注意:只有當前這個類是容器中的組件時,才可以用容器提供的@ConfigurationProperties功能;
*
* */
@Component
@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> lists;
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
'}';
}
getter...
setter...
}
編寫配置文件
#private String lastName;
#private Integer age;
#private Boolean boss;
#private Date birth;
#
#private Map<String,Object> maps;
#private List<Object> lists;
#配置person的屬性值
person.last-name=zhangsan
person.age=18
person.boss=false
person.birth=1992/02/20
person.maps.k1=v1
person.maps.k2=111
person.lists=a,b,c
測試類:
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationConfig {
@Autowired
Person person;
@Test
public void testPersonProperties(){
System.out.println(person);
}
}
運行結果:
@Value給屬性設置值
編寫JavaBean
@Component
//@ConfigurationProperties(prefix="person")
public class Person {
@Value("${person.last-name}") // 從配置文件中獲取值
private String lastName;
@Value("#{2*8}") // spring表達式
private Integer age;
@Value("true") // boolean值
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
'}';
}
}
運行結果:
@ConfigurationProperties和@Value對比
@ConfigurationProperties @Value
功能 根據配置文件中設置的屬性,批量注入屬性值 單個指定值
松散語法 支持(lastName可以寫作last-name、last_name) 不支持
SpEL(Spring表達式) 不支持 支持
JSR303數據校驗 支持(可以通過@Email等注解校驗屬性值是否符合要求) 不支持
復雜類型封裝(Map、List等類型) 支持 不支持
應用場景
如果只是某個業務中需要獲取配置文件中的某項值或者設置具體值,可以使用@Value;
如果一個JavaBean中大量屬性值要和配置文件進行映射,可以使用@ConfigurationProperties;
---------------------
作者:小猴子豆芽菜
來源:CSDN
原文:https://blog.csdn.net/XU906722/article/details/81517429
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
