SpringBoot?配置文件給實(shí)體注入值方式
配置文件給實(shí)體注入值
SpringBoot 默認(rèn)的全局配置文件有兩個(gè) application.properties 和application.yml
properties用法
# 例如修改端口號(hào) 直接賦值 server.port=8888
yaml用法
# 例如修改端口號(hào) server: ?? ?port: 8888
- YML中賦值是以鍵值對(duì)的形式,且利用縮進(jìn)表示層級(jí)關(guān)系,同一級(jí)縮進(jìn)必須一致
- 大小寫(xiě)敏感,支持松散寫(xiě)法,且冒號(hào)后面必須有一個(gè)空格
通過(guò)配置文件給實(shí)體類注入屬性
// 實(shí)體類
@Component // 把實(shí)體類放入到spring容器中
@ConfigurationProperties(prefix = "student") // 識(shí)別配置文件
public class Student {
private String name;
private int age;
private boolean sex;
private Date birthday;
private Map<String, Object> location;
private String[] hobbies;
private List<String> skills;
private Pet pet;
// .... set/get/toString
}
# yml 配置文件
student:
name: zs
age: 23
sex: true
birthday: 2020/10/1
location: {province: 湖北,city: 武漢, zone: 洪山}
hobbies: [足球, 籃球]
skills: [編程, 金融]
pet:
nickName: wc
strain: hsq
在這里注意不同數(shù)據(jù)類型的寫(xiě)法,簡(jiǎn)單的數(shù)據(jù)直接賦值
# map類型和對(duì)象類型 的兩種寫(xiě)法
# 1.行內(nèi)寫(xiě)法
location: {province: 湖北,city: 武漢, zone: 洪山}
pet: {nickName: wc, strain: hsq}
# 2.分行寫(xiě)
location:
province: 湖北
city: 武漢
zone: 洪山
pet:
nickName: wc
strain: hsq
# 數(shù)組、list、set # 1、行內(nèi)寫(xiě)法, 其中中括號(hào)還可以省略 hobbies: [足球, 籃球] skills: [編程, 金融] # 2、分行寫(xiě) hobbies: - 足球 - 籃球 skills: - 編程 - 金融
到 SpringBoot 測(cè)試文件中測(cè)試輸出
? ? @Autowired
? ? Student student;
? ? @Test
? ? void contextLoads() {
? ? ? ? System.out.println(student);
? ? }結(jié)果
Student{name='zs', age=23, sex=true, birthday=Thu Oct 01 00:00:00 CST 2020, location={province=湖北, city=武漢, zone=洪山}, hobbies=[足球,籃球], skills=[編程, 金融], pet=Pet{nickName='wc', strain='hsq'}}
上面yml中注意
# 如果對(duì)字符串加單引號(hào),雙引號(hào)會(huì)有什么區(qū)別
location: {province: "湖北",city: '武漢', zone: 洪山}
# 如果引號(hào)中只是字符串時(shí)沒(méi)什么區(qū)別
location: {province: "湖\n北",city: '武\n漢', zone: 洪\n山}
# 此時(shí)雙引號(hào)中的轉(zhuǎn)義字符會(huì)被識(shí)別,會(huì)換行,單引號(hào)和不加引號(hào)會(huì)原樣輸出
也可以使用properties注入
student.name=ls student.age=24 ...
其中properties文件和yml文件中的值可以互相引用。兩個(gè)配置文件可以互補(bǔ),properties文件優(yōu)先級(jí)高于yml
另外如果要注入的值不在這兩個(gè)默認(rèn)配置文件中,這是需要使用@PropertySource注解,遺憾的是該注解只支持properties文件,不支持yml文件
@PropertySource(value = {"classpath:conf.properties"})
public class Student {
?? ?...配置文件值注入方式
1.1 從全局配置文件中讀取配置到實(shí)體類 (@ConfigurationProperties)
配置文件 (application.yml)(寫(xiě)在application.properties也可以,格式變一下即可)
person:
lastName: Mary
age: 16
birthDate: 2004/01/01
maps: {one:1,two:2,three:3}
lists:
- 1
- 2
- 3
pet:
name: wangcai
age: 3實(shí)體類(javaBean):
/**
* 將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中
*
* @Component:
* 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能;
*
* @ConfigurationProperties:
* 告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定(默認(rèn)配置文件為application.properties與
* application.yml);
*
* prefix = "person":
* 配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Date birthDate;
private Map<String,Object> maps;
private List<Object> lists;
private Pet pet;
//省略get,set方法
@Override
public String toString() {
String mapValue = "";
if(this.maps!=null){
for(String key:this.maps.keySet()){
Object value = this.maps.get(key);
mapValue += key+"\t"+value+"\t";
}
}
return "lastName:"+this.lastName+
"\nage:"+this.age+
"\nbirthDate:"+this.birthDate+
"\nmaps:"+mapValue+
"\nlists:"+this.lists+
this.pet;
}
}
public class Pet {
private String name;
private Integer age;
//省略get,set方法
@Override
public String toString() {
return "\nPet:\n\tPet name:"+this.name+
"\n\tPet age:"+this.age+"\n";
}
}
我們可以導(dǎo)入配置文件處理器,以后編寫(xiě)配置就有提示了(pom.xml)
<!--導(dǎo)入配置文件處理器,配置文件進(jìn)行綁定就會(huì)有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

測(cè)試
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person.toString());
}
}
1.2 全局配置文件注入值(@Value)
@Value 其實(shí)是Spring中的注解,其功能使用xml文件描述是這樣的:
?<bean class="Person">
? ? ?<property name="lastName" value="字面量/${key}從環(huán)境變量、配置文件中獲取值/#{SpEL}"></property>
?<bean/>其中property表示的是Person類中的各項(xiàng)屬性,name用于指定具體屬性,value用于指定值。
value的值主要有3種:
- 字面量,也就是數(shù)字(1,2…)、字符串(abc)、布爾變量(true、false)等常量
- ${key},從環(huán)境變量、配置文件中獲取值
- #{SpEL}, Spring的表達(dá)式語(yǔ)言,可以執(zhí)行一些計(jì)算,調(diào)用一些函數(shù)
@Component
public class Person {
@Value("${person.last-name}") //@Value("#{'Lily'.toUpperCase()}")
private String lastName;
@Value("#{11*2}")
private Integer age;
private Date birthDate;
private Map<String,Object> maps;
private List<Object> lists;
private Pet pet;
//省略get,set和toString
}
1.3 從指定文件讀取并配置實(shí)體類(@PropertySource+@ConfigurationProperties)
在 resources 目錄下創(chuàng)建 person.properties
person.lastName = Lily person.age = 20 person.birthDate = 2000/01/01 person.maps.one = 1 person.maps.two = 2 person.lists = a,b,ch person.pet.name = wangcai person.pet.age = 3
更改 Person 類中的注解
@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
//...省略屬性,get,set,toString
}
要注意的是,PropertySource 只支持properties文件,不支持yml文件讀取。
1.4 從指定文件讀取并注入值(@PropertySource+@Value)
創(chuàng)建配置文件
更改注釋
@Component
@PropertySource(value = {"classpath:person.properties"})
public class Person {
@Value("${person.last-name}")
private String lastName;
//...省略屬性,get,set,toString
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 解決springboot配置文件組解決自動(dòng)配置屬性無(wú)法注入問(wèn)題
- 詳解SpringBoot依賴注入和使用配置文件
- Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解
- SpringBoot注入自定義的配置文件的方法詳解
- springboot配置文件中使用${}注入值的兩種方式小結(jié)
- springboot?yml配置文件值注入方式
- springboot注入yml配置文件 list報(bào)錯(cuò)的解決方案
- 使用Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類
- SpringBoot注入配置文件的3種方法詳解
- SpringBoot配置文件注入值的簡(jiǎn)單實(shí)現(xiàn)
相關(guān)文章
Java語(yǔ)言實(shí)現(xiàn)基數(shù)排序代碼分享
這篇文章主要介紹了Java語(yǔ)言實(shí)現(xiàn)基數(shù)排序代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
淺談SpringBoot @Autowired的兩種注入方式
本文主要介紹了兩種SpringBoot @Autowired注入方式,具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
Java算法練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(2)
方法下面小編就為大家?guī)?lái)一篇Java算法的一道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
Spring通過(guò)Java配置集成Tomcat的方法
這篇文章主要介紹了Spring通過(guò)Java配置集成Tomcat的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
全網(wǎng)最深分析SpringBoot MVC自動(dòng)配置失效的原因
這篇文章主要介紹了全網(wǎng)最深分析SpringBoot MVC自動(dòng)配置失效的原因,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Mybatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充的項(xiàng)目實(shí)踐
本文主要介紹了Mybatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Java開(kāi)發(fā)HashMap?key必須實(shí)現(xiàn)hashCode?equals方法原理
這篇文章主要為大家介紹了Java開(kāi)發(fā)HashMap?key必須實(shí)現(xiàn)hashCode?equals方法原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

