您好,歡迎來到賦能網(wǎng)!

pringboot怎么加載配置文件?Spring Boot 如何配置優(yōu)先級?

賦能網(wǎng) 2023-05-09 53

springboot具有 Spring 一切優(yōu)秀特性,是優(yōu)秀的開源框架,在進行項目開發(fā)的過程中,我們經(jīng)常需要將一些變量從代碼中拿出來放在配置文件中,這樣方便之后的統(tǒng)一管理,更好的配置信息,那springboot怎么加載配置文件?下面來我們就來給大家講解一下。

1.通過@value注解實現(xiàn)參數(shù)加載

當我們想要在某個類里面注入某個變量,通過@value注解就可以簡單實現(xiàn)參數(shù)的注入!

例如application.properties文件里,配置一個config.name的變量key,值為zhangsan;

//參數(shù)定義
config.name=zhangsan

然后在對應(yīng)的類里面,通過參數(shù)@value注入即可!

@RestController
public class HelloController {
@Value("${config.name}")
private String config;
@GetMapping("config")
public String config(){
return JSON.toJSonString(config);
}
}

使用@value注解注入配置,通常情況下有個要求就是,注解里面的變量,必須在application.properties文件里面事先定義好,否則啟動報錯!

當然,如果我們不想讓它抱錯,我們可以給它一個缺省值xxx,比如:

@Value("${config.name:xxx}")
private String config;

這樣,SpringBoot 項目在啟用時不會報錯!

2.通過@ConfigurationProperties注解實現(xiàn)參數(shù)加載

某些場景下,@value注解并不能滿足我們所有的需求,比如參數(shù)配置的數(shù)據(jù)類型是一個對象或者數(shù)組,這個時候才用@ConfigurationProperties會是一個比較好的選擇!

配置一個對象類型的參數(shù)

例如在application.properties文件里,當我們想配置一個對象類型的參數(shù),我們可以這樣操作!

//參數(shù)定義
config2.name=demo_1
config2.value=demo_value_1

然后,創(chuàng)建一個配置類Config2,用于將定義的變量映射到配置類里面。

@Component
@ConfigurationProperties(prefix = "config2")
public class Config2 {
public String name;
public String value;
//...get、set
}

讀取數(shù)據(jù)的方式,也很簡單,直接注入到對應(yīng)的類里面就可以了;

@RestController
public class HelloController {
@Autowired
private Config2 config2;
@GetMapping("config2")
public String config2(){
return JSON.toJSonString(config2);
}
}

配置一個Map類型的參數(shù)

例如在application.properties文件里,當我們想配置一個 Map 類型的參數(shù),我們可以這樣操作!

//參數(shù)定義
config3.map1.name=demo_id_1_name
config3.map1.value=demo_id_1_value
config3.map2.name=demo_id_2_name
config3.map2.value=demo_id_2_value

然后,創(chuàng)建一個配置類Config3,用于將定義的變量映射到配置類里面。

@Component
@ConfigurationProperties(prefix = "config3")
public class Config3 {
private Mapmap1 = new HashMap<>();
private Mapmap2 = new HashMap<>();
//...get、set
}

讀取數(shù)據(jù)的方式,與之類似!

@RestController
public class HelloController {
@Autowired
private Config3 config3;
@GetMapping("config3")
public String config3(){
return JSON.toJSonString(config3);
}
}

配置一個List類型的參數(shù)

例如在application.properties文件里,當我們想配置一個 List 類型的參數(shù),我們可以這樣操作!

//參數(shù)定義
config4.userList[0].enable=maillist_1_enable
config4.userList[0].name=maillist_1_name
config4.userList[0].value=maillist_1_value
config4.userList[1].enable=maillist_2_enable
config4.userList[1].name=maillist_2_name
config4.userList[1].value=maillist_2_value
config4.userList[2].enable=maillist_3_enable
config4.userList[2].name=maillist_3_name
config4.userList[2].value=maillist_3_value

然后,創(chuàng)建一個配置類Config4,用于將定義的變量映射到配置類里面。

@Component
@ConfigurationProperties(prefix = "config4")
public class Config4 {
private ListuserList;
public ListgetUserList() {
return userList;
}
public void setUserList(ListuserList) {
this.userList = userList;
}
}
public class UserEntity {
private String enable;
private String name;
private String value;
//...get、set
}

讀取數(shù)據(jù)的方式,與之類似!

@RestController
public class HelloController {
@Autowired
private Config4 config4;
@GetMapping("config4")
public String config4(){
return JSON.toJSonString(config4);
}
}

Spring Boot 如何配置優(yōu)先級?

以下是常用的 Spring Boot 配置形式及其加載順序(優(yōu)先級由高到低):

1. 命令行參數(shù)

2. 來自 java:comp/env 的 JNDI 屬性

3. Java 系統(tǒng)屬性(System.getProperties())

4. 操作系統(tǒng)環(huán)境變量

5. RandomValuePropertySource 配置的 random.* 屬性值

6. 配置文件(YAML 文件、Properties 文件)

7. @Configuration 注解類上的 @PropertySource 指定的配置文件

8. 通過 SpringApplication.setDefaultProperties 指定的默認屬性

以上所有形式的配置都會被加載,當存在相同配置內(nèi)容時,高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置;存在不同的配置內(nèi)容時,高優(yōu)先級和低優(yōu)先級的配置內(nèi)容取并集,共同生效,形成互補配置。

Spring Boot 配置優(yōu)先級的順序就是以上這些,使用Spring Boot 的時候,我們要學(xué)會配置,使其在不同的環(huán)境中運行。最后大家如果想要了解更多java架構(gòu)師知識,敬請關(guān)注賦能網(wǎng)。


本文鏈接:

本文章“pringboot怎么加載配置文件?Spring Boot 如何配置優(yōu)先級?”已幫助 53 人

免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權(quán)侵權(quán)的法律責任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579

如果本頁不是您要找的課程,您也可以百度查找一下: