springboot如何讀取自定義屬性
很多時(shí)候,我們開(kāi)發(fā)當(dāng)中,需要通過(guò)配置自己的屬性信息來(lái)滿(mǎn)足不同環(huán)境下的應(yīng)用部署,因此需要springboot能夠讀取我們自定義的屬性,常用的讀取自定義屬性有@Value和@ConfigurationProperties,下面分別做簡(jiǎn)單的介紹
1、@Value

可以看到點(diǎn)擊進(jìn)去源碼,表明當(dāng)前注解,可以使用在屬性、方法或者構(gòu)造方法上,支持SPEL表達(dá)式和占位符注解方式,此標(biāo)簽通常是單個(gè)配置加載的數(shù)據(jù)
例如在配置文件中,配置了name和age兩個(gè)屬性
lixl:
person:
name: lixl
age: 20
我們?cè)诖a中的屬性上,直接注解
/**
* @author lixl
* @description
* @date 2022/2/15
*/
@Component
public class Person {
@Value("${lixl.person.name}")
private String name;
@Value("${lixl.person.age}")
private String age;
@Override
public String toString() {
return "name:"+this.name+";age:"+this.age;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
可以看到,正常打印

修改代碼,將其注解在方法上,運(yùn)行main方法,依然可以使用
@Value("${lixl.person.name}")
public void setName(String name) {
this.name = name;
}
再次修改代碼,將其注解在構(gòu)造方法的參數(shù)上,依然能夠進(jìn)行注入
public Person(@Value("${lixl.person.name}")String name, @Value("${lixl.person.age}")String age) {
this.name = name;
this.age = age;
}
另外,如果我們需要給定@Value默認(rèn)值,也是可以的,例如我們刪除了name字段,同時(shí)在@Value中增加默認(rèn)值
// 默認(rèn)是通過(guò) : + 默認(rèn)值 給定
public Person(@Value("${lixl.person.name:張三}")String name, @Value("${lixl.person.age}")String age) {
this.name = name;
this.age = age;
}

運(yùn)行結(jié)果,也是正常的
我們?cè)賮?lái)看看Spel表達(dá)式
@Value("#{'男'}") // 增加性別字段
private String gender;
// 修改toString方法打印性別
public String toString() {
return "name:"+this.name+";age:"+this.age+";gender:"+this.gender;
}

運(yùn)行結(jié)果正常通過(guò),還有其他很多Spel表達(dá),此處就不完全列舉了
比如我們?cè)谂渲梦募兄付藢傩詎ame=‘java’ 在需要使用的組件中,設(shè)定@Value("${name}") 注解在相應(yīng)的字段上,springboot就會(huì)自動(dòng)加載。當(dāng)然,@Value還可以使用Spel表達(dá)是,注入值使用@Value("#{Spel}").
2、@ConfigurationProperties 可以對(duì)配置文件中,某一類(lèi)前綴開(kāi)頭的屬性整體進(jìn)行注入,例如:
配置文件中,有如下配置
test.name='lixl' test.age='age'
配置類(lèi)需要按照一下方式編寫(xiě)
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component // 首先本身要是springboot容器中的組件
@ConfigurationProperties(prefix = "test") // 指定前綴
public class ConfigTest {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
目前都是用到的springboot默認(rèn)的配置文件,我們也可以自己指定配置文件
使用@PropertySource(“classpath:xxx.properties”),進(jìn)行加載配置文件
以上就是springboot如何讀取自定義屬性的詳細(xì)內(nèi)容,更多關(guān)于springboot讀取自定義屬性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot如何獲取request請(qǐng)求的原始url與post參數(shù)
這篇文章主要介紹了springboot如何獲取request請(qǐng)求的原始url與post參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
HashMap vs TreeMap vs Hashtable vs LinkedHashMap
這篇文章主要介紹了HashMap vs TreeMap vs Hashtable vs LinkedHashMap的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Java數(shù)據(jù)存儲(chǔ)的“雙子星”對(duì)決(Map和Set的區(qū)別)
文章主要介紹了Java中Map和Set兩種數(shù)據(jù)結(jié)構(gòu)的定義、實(shí)現(xiàn)、方法及應(yīng)用場(chǎng)景,Map用于存儲(chǔ)鍵值對(duì),鍵唯一,值可重復(fù);Set用于存儲(chǔ)唯一元素,無(wú)序,兩者都提供了豐富的操作方法,如添加、刪除、查找等,感興趣的朋友一起看看吧2025-02-02
SpringBoot中restTemplate請(qǐng)求存在亂碼問(wèn)題的解決方法
這篇文章主要介紹了SpringBoot中restTemplate請(qǐng)求存在亂碼問(wèn)題的解決方法,文中有相關(guān)的圖文和代碼示例供大家參考,對(duì)大家的解決問(wèn)題有一定的幫助,需要的朋友可以參考下2024-11-11
利用Thumbnailator輕松實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)與加水印
java開(kāi)發(fā)中經(jīng)常遇到對(duì)圖片的處理,JDK中也提供了對(duì)應(yīng)的工具類(lèi),不過(guò)處理起來(lái)很麻煩,Thumbnailator是一個(gè)優(yōu)秀的圖片處理的開(kāi)源Java類(lèi)庫(kù),處理效果遠(yuǎn)比Java API的好,這篇文章主要介紹了利用Thumbnailator如何輕松的實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)與加水印,需要的朋友可以參考下2017-01-01

