欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot讀取外部配置文件的方法

 更新時(shí)間:2022年02月09日 10:58:15   作者:_再見理想  
這篇文章主要介紹了SpringBoot讀取外部配置文件的方法,以端口配置為例,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.SpringBoot配置文件

SpringBoot使用一個(gè)以application命名的配置文件作為默認(rèn)的全局配置文件。支持properties后綴結(jié)尾的配置文件或者以yml/yaml后綴結(jié)尾的YAML的文件配置。

以設(shè)置應(yīng)用端口為例

properties文件示例(application.properties):

server.port=80

YAML文件示例(application.yml):

server:
  port: 80

在properties和yml/yaml配置文件同時(shí)存在的情況下, 在同一目錄下,properties配置優(yōu)先級(jí) > YAML(YML)配置優(yōu)先級(jí)

2.配置文件目錄

SpringBoot配置文件可以放置在多種路徑下,不同路徑下的配置優(yōu)先級(jí)有所不同。

可放置目錄(優(yōu)先級(jí)從高到低)

./config/ (當(dāng)前項(xiàng)目路徑config目錄下);
./ (當(dāng)前項(xiàng)目路徑下);
classpath:/config/ (類路徑config目錄下);
classpath:/ (類路徑config下).

優(yōu)先級(jí)由高到底,高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先級(jí)的配置;

SpringBoot會(huì)從這四個(gè)位置全部加載配置文件并互補(bǔ)配置;

我們可以從ConfigFileApplicationListener這類便可看出,其中DEFAULT_SEARCH_LOCATIONS屬性設(shè)置了加載的目錄:

private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";

接著getSearchLocations方法中去逗號(hào)解析成Set,其中內(nèi)部類Loader負(fù)責(zé)這一配置文件的加載過程,

包括加載profile指定環(huán)境的配置,以application+’-’+name格式的拼接加載。

多種目錄配置同時(shí)存在情況

接下來還是以端口配置為例

在resources/目錄下配置文件設(shè)置端口為8888;
在resources/config目錄下配置文件設(shè)置端口為9999;
在項(xiàng)目路徑下配置文件設(shè)置端口為6666;
在項(xiàng)目路徑config目錄下配置文件設(shè)置端口為7777;

]

最終運(yùn)行結(jié)果:

Tomcat started on port(s): 7777 (http) with context path '/beedo'
Started BeedoApplication in 4.544 seconds (JVM running for 5.335)

通過控制變量法得以論證
其優(yōu)先級(jí)由高到底,高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先級(jí)的配置

3.自定義配置屬性

SpringBoot提供了許多的配置,但通常情況我們需要自定義自己的配置應(yīng)用自己的系統(tǒng)中,如你需要配置一個(gè)默認(rèn)的用戶名密碼做為系統(tǒng)的登錄用。
首先創(chuàng)建一個(gè)實(shí)體類,作為配置注入用,并使用@ConfigurationProperties注解進(jìn)行批量注入, 也可以使用Spring底層注解@Value("${user.username}")的方式一個(gè)一個(gè)注入達(dá)到同意的效果

@Component
@ConfigurationProperties(prefix = "user")
public class Login{
    private String username;
    private String password;
    ...
}

或者@Value寫法

@Component
public class Login{
    private String username;
    private String password;
    ...
}

配置文件寫法

# yml文件寫法
user:
    username: admin
    password: 123
# properties寫法
login.username=admin
login.password=123

編寫一個(gè)junit測(cè)試用例,看看配置的值是否正常注入:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DeployApplicationTests {
    @Autowired
    private Login login;
    @Test
    public void contextLoads() {
        System.out.println(login);
    }
}

從輸出結(jié)果上看,值已正常注入
Login{username=‘admin’, password=‘123’}

@ConfigurationProperties與@Value兩種注解對(duì)比

比較項(xiàng)@ConfigurationProperties@Value
全量注入支持不支持
松散綁定(Relaxed Binding)支持不支持
SpEL不支持支持
JSR303支持不支持

松散綁定:駝峰命名(userName)、橫干拼接(user-name)、下劃線(user_name)之間可以互相識(shí)別綁定稱為做松散綁定
JSR303:通過@Email,@Nullable,@Digits 等等注解進(jìn)行郵箱、判空、數(shù)字格式等等數(shù)據(jù)的校驗(yàn),更多相關(guān)內(nèi)容請(qǐng)參考IBM的中文文檔:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/index.html
@ConfigurationProperties通常用于將配置全量注入某個(gè)類中;
@Value通常用于注入某一些特定配置值中;

使用@ConfigurationProperties方式可以進(jìn)行配置文件與實(shí)體字段的自動(dòng)映射,但需要字段必須提供set方法才可以,而使用@Value注解修飾的字段不需要提供set方法

自定義配置提示

在編寫配置時(shí),你會(huì)發(fā)現(xiàn)自定義配置沒有提示,讓你在使用自定義配置時(shí)變的很麻煩,其實(shí)SpringBoot早已為我們準(zhǔn)備好了提示的需要,只需要用引入相關(guān)依賴即可有提示。
在沒有加入依賴時(shí)idea會(huì)有如下提示:

添加依賴,該idea提示便消失,編寫自定義配置時(shí)也有相應(yīng)提示:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

需要運(yùn)行一下

4.指定配置文件

通常情況下我們將配置配置在application開頭的主配置文件中,這樣隨著項(xiàng)目的增大配置項(xiàng)的增多會(huì)使文件變得非常臃腫,其實(shí)SpringBoot早已考慮到了該問題,SpringBoot提供了@PropertySource和@ImportResource兩個(gè)注解用于加載外部配置文件使用。

  • @PropertySource通常用于屬性加載配置文件,注意@PropertySource注解不支持加載yaml文件,支持properties文件。
  • @ImportResource通常用于加載Spring的xml配置文件

@PropertySource使用

裝配properties配置文件

在sources/config下創(chuàng)建一個(gè)yaml文件命名為user.properties內(nèi)容與上方user的配置一樣

Login類可如下寫法

@PropertySource(value = {"classpath:config/user.properties"})
@Component
@ConfigurationProperties(prefix = "user")
public class Login{
    private String username;
    private String password;
    ...
}

運(yùn)行一下,同樣能達(dá)到加載配置效果

同時(shí)加載多個(gè)配置問題
細(xì)心的你,會(huì)發(fā)現(xiàn)@PropertySource注解中屬性value為一個(gè)數(shù)組,如果同時(shí)加載多個(gè)配置文件,并且不同配置文件中對(duì)同一個(gè)屬性設(shè)置了不同的值,那么Spring會(huì)識(shí)別哪一個(gè)呢?
帶著疑問,我們可以通過控制變量法進(jìn)行測(cè)試,具體過程再在贅述。

@PropertySource(value = {"classpath:config/user1.properties","classpath:config/user2.properties"})

結(jié)論:Spring加載順序?yàn)閺淖蟮接翼樞蚣虞d,后加載的會(huì)覆蓋先加載的屬性值。

裝配yaml配置文件

如果你有強(qiáng)迫癥,一定想加載yaml配置文件,那么可以通過PropertySourcesPlaceholderConfigurer類來加載yaml文件,將原來的user.properties改成user.yaml,Bean配置類中加入如下代碼,Login配置類和一開始的方式一致。

@Bean
public static PropertySourcesPlaceholderConfigurer loadProperties() {
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    //yaml.setResources(new FileSystemResource("classpath:config/user.yml"));//File路徑引入
    yaml.setResources(new ClassPathResource("config/user.yml"));//class路徑引入
    configurer.setProperties(yaml.getObject());
    return configurer;
}

運(yùn)行一下,仍然可以能達(dá)到加載配置效果的

@ImportResource使用

SpringBoot提出零xml的配置,因此SpringBoot默認(rèn)情況下時(shí)不會(huì)識(shí)別項(xiàng)目中Spring的xml配置文件。為了能夠加載xml的配置文件,SpringBoot提供了@ImportResource注解該注解可以加載Spring的xml配置文件,通常加于啟動(dòng)類上。

@ImportResource(value = {"classpath:/beans.xml"})
@SpringBootApplication(scanBasePackages = {"team.seagull.client"})
public class DeployApplication {
    public static void main(String[] args) {
        SpringApplication.run(DeployApplication.class, args);
    }
}

其他問題

idea使用.properties文件出現(xiàn)中文亂碼問題?
idea對(duì).properties默認(rèn)編碼為GBK,通常我們項(xiàng)目為UTF-8編碼,這樣程序在讀取時(shí)就會(huì)出現(xiàn)亂碼問題;
解決方法:idea 中 打開如下選項(xiàng)File->Sttings->Editor->FileEncodings

將GBK修改為UTF-8并勾選
Transparent native-to ascill conversion(在運(yùn)行的時(shí)候轉(zhuǎn)換成ascii碼)

到此這篇關(guān)于SpringBoot讀取外部配置文件的方法的文章就介紹到這了,更多相關(guān)SpringBoot讀取外部配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中的響應(yīng)式web應(yīng)用詳解

    SpringBoot中的響應(yīng)式web應(yīng)用詳解

    這篇文章主要介紹了SpringBoot中的響應(yīng)式web應(yīng)用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Android中幾種圖片特效的處理的實(shí)現(xiàn)方法

    Android中幾種圖片特效的處理的實(shí)現(xiàn)方法

    這篇文章主要介紹了 Android中幾種圖片特效的處理的實(shí)現(xiàn)方法的相關(guān)資料,這里有放大縮小圖片,獲得圓角圖片,獲得帶倒影圖片的幾種方法,需要的朋友可以參考下
    2017-08-08
  • springboot中如何替換class文件

    springboot中如何替換class文件

    這篇文章主要介紹了springboot中如何替換class文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Spring擴(kuò)展BeanFactoryPostProcessor使用技巧詳解

    Spring擴(kuò)展BeanFactoryPostProcessor使用技巧詳解

    這篇文章主要為大家介紹了Spring擴(kuò)展BeanFactoryPostProcessor使用技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Java中判斷對(duì)象是否為空的不同方法

    Java中判斷對(duì)象是否為空的不同方法

    在Java編程中,經(jīng)常會(huì)遇到判斷對(duì)象是否為空的情況,本篇將深入探討Java中判斷對(duì)象是否為空的不同方法,包括使用條件判斷、使用Java 8的Optional類、使用Apache Commons Lang庫等,通過詳細(xì)的解釋和舉例說明,幫助讀者正確處理空對(duì)象問題,需要的朋友一起看看吧
    2023-11-11
  • 最新評(píng)論