最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot引入額外的YAML配置文件的代碼實(shí)現(xiàn)

 更新時間:2024年09月23日 16:18:49   作者:Season-0209  
在SpringBoot項目中,有時需要引入除application.yml之外的配置文件(例如在開發(fā)公共組件時),使用@PropertySource注解可以實(shí)現(xiàn)這一需求,但有一些細(xì)節(jié)點(diǎn)需要注意,在此記錄,感興趣的小伙伴跟著小編一起來看看吧

背景

在SpringBoot項目中,有時需要引入除application.yml之外的配置文件(例如在開發(fā)公共組件時)。使用@PropertySource注解可以實(shí)現(xiàn)這一需求,但有一些細(xì)節(jié)點(diǎn)需要注意,在此記錄。

代碼實(shí)現(xiàn)

假設(shè)有一份名為extra.yml的配置文件:

# extra.yml
extra:
  name: 張三
  order: 3

對應(yīng)的配置bean為:

@Data
@ConfigurationProperties("extra")
public class ExtraProperties {

    private String name;

    private Integer order;
}

在配置類上添加相關(guān)注解,將extra.yml配置文件添加到Spring環(huán)境中:

@Configuration
@EnableConfigurationProperties(ExtraProperties.class)
@PropertySource(
        // 配置文件路徑
        value = "classpath:/extra.yml",
        // 當(dāng)配置文件不存在時,是忽略還是報錯
        ignoreResourceNotFound = true,
        // 配置文件編碼
        encoding = "UTF-8",
        // 配置文件加載工廠
        factory = YamlPropertySourceFactory.class)
public class ExtraConfig {
}

由于@PropertySource默認(rèn)支持的是.properties格式的配置文件,而我們一般使用的是YAML格式的,因此這里自定義了配置文件加載工廠,支持YAML,并解決ignoreResourceNotFound不生效的問題:

/**
 * YAML配置文件加載工廠
 */
public class YamlPropertySourceFactory implements PropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
        try {
            return new YamlPropertySourceLoader()
                    .load(resource.getResource().getFilename(), resource.getResource())
                    .get(0);
        } catch (IllegalStateException e) {
            // 如果YAML配置文件不存在,希望能忽略該文件,而不是引發(fā)異常導(dǎo)致Spring容器啟動失敗
            // 需要往外拋FileNotFoundException,Spring捕捉到后會忽略該異常(當(dāng) ignoreResourceNotFound = true 時)
            if (e.getCause() instanceof FileNotFoundException) {
                throw (FileNotFoundException) e.getCause();
            } else {
                throw e;
            }
        }
    }
}

這樣,ExtraProperties配置bean里的屬性值, 就與extra.yml里的配置值綁定在一起了。

補(bǔ)充說明

標(biāo)準(zhǔn)配置文件application.yml的生效優(yōu)先級高于額外引入的配置文件。如果application.yml中指定了相同的配置項,則它會覆蓋extra.yml中對應(yīng)的配置項:

# application.yml,會覆蓋extra.yml中的相同配置項
extra:
  name: 李四
  order: 4

當(dāng)然,如果使用了環(huán)境配置文件application-{profile}.yml,則它的生效優(yōu)先級又會高于application.yml。

另外,@PropertySource支持引入多個配置文件。例如,在引入extra.yml的同時,引入對應(yīng)的環(huán)境配置文件extra-{profile}.yml:

@Configuration
@EnableConfigurationProperties(ExtraProperties.class)
@PropertySource(
        value = {"classpath:/extra.yml", "classpath:/extra-${spring.profiles.active}.yml"},
        ignoreResourceNotFound = true,
        encoding = "UTF-8",
        // 配置文件加載工廠
        factory = YamlPropertySourceFactory.class)
public class ExtraConfig {
}

這里,Spring會將占位符${spring.profiles.active}解析為對應(yīng)的值。例如,在application.yml中指定spring.profiles.active=dev,那么配置文件extra-dev.yml會被引入(如有),它的生效優(yōu)先級高于extra.yml,但低于application.yml。

# extra-dev.yml,會覆蓋extra.yml中的相同配置項
extra:
  name: 王五
  order: 5

總結(jié)

  • @PropertySource用于引入額外的配置文件。
  • 通過自定義配置文件加載工廠,可支持YAML文件解析,并支持ignoreResourceNotFound。
  • 配置文件生效的優(yōu)先級順序為:application-{profile}.yml>application.yml>extra-{profile}.yml>extra.yml。

以上就是SpringBoot引入額外的YAML配置文件的代碼實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot引入額外YAML文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用MyBatis-Plus靈活處理JSON字段的技巧與最佳實(shí)踐

    利用MyBatis-Plus靈活處理JSON字段的技巧與最佳實(shí)踐

    這篇文章主要給大家介紹了關(guān)于利用MyBatis-Plus靈活處理JSON字段的技巧與最佳實(shí)踐,Mybatis-Plus可以很方便地處理JSON字段,在實(shí)體類中可以使用@JSONField注解來標(biāo)記JSON字段,需要的朋友可以參考下
    2024-07-07
  • Java實(shí)現(xiàn)計算器的代碼

    Java實(shí)現(xiàn)計算器的代碼

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)計算器的詳細(xì)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • spring緩存cache的使用詳解

    spring緩存cache的使用詳解

    這篇文章主要介紹了spring緩存cache的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • nacos在mac上部署提示找不到或無法加載主類的解決

    nacos在mac上部署提示找不到或無法加載主類的解決

    這篇文章主要介紹了nacos在mac上部署提示找不到或無法加載主類的解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Spring Boot 配置和使用多線程池的實(shí)現(xiàn)

    Spring Boot 配置和使用多線程池的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Boot 配置和使用多線程池的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java時間類Date類和Calendar類的使用詳解

    Java時間類Date類和Calendar類的使用詳解

    這篇文章主要介紹了Java時間類Date類和Calendar類的使用詳解,需要的朋友可以參考下
    2017-08-08
  • IDEA感覺不香了AI智能編程工具Cursor使用圖文教程

    IDEA感覺不香了AI智能編程工具Cursor使用圖文教程

    這篇文章主要介紹了IDEA感覺不香了AI智能編程工具Cursor使用,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Nacos源碼之注冊中心的實(shí)現(xiàn)詳解

    Nacos源碼之注冊中心的實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Nacos源碼之注冊中心的實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Spring?Cloud?Stream實(shí)現(xiàn)數(shù)據(jù)流處理

    Spring?Cloud?Stream實(shí)現(xiàn)數(shù)據(jù)流處理

    Spring?Cloud?Stream的核心是Stream,準(zhǔn)確來講Spring?Cloud?Stream提供了一整套數(shù)據(jù)流走向(流向)的API,?它的最終目的是使我們不關(guān)心數(shù)據(jù)的流入和寫出,而只關(guān)心對數(shù)據(jù)的業(yè)務(wù)處理,本文給大家介紹了Spring?Cloud?Stream實(shí)現(xiàn)數(shù)據(jù)流處理,需要的朋友可以參考下
    2024-11-11
  • Springboot攔截器如何獲取@RequestBody參數(shù)

    Springboot攔截器如何獲取@RequestBody參數(shù)

    這篇文章主要介紹了Springboot攔截器如何獲取@RequestBody參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

普洱| 东兰县| 渝中区| 壤塘县| 清水县| 抚松县| 金门县| 兴山县| 新乡市| 永仁县| 罗定市| 云阳县| 保山市| 鄂温| 林西县| 永春县| 濉溪县| 平阴县| 桓台县| 长海县| 长春市| 麟游县| 开封县| 安图县| 四会市| 射阳县| 康马县| 建宁县| 溧阳市| 克东县| 苍溪县| 保康县| 沿河| 台湾省| 虞城县| 绥德县| 逊克县| 察雅县| 荔波县| 衡南县| 中方县|