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

SpringBoot讀取yml文件中配置數(shù)組的2種方法

 更新時(shí)間:2021年12月16日 09:35:11   作者:KinYang_Lau  
這篇文章主要介紹了SpringBoot讀取yml文件中配置數(shù)組的2種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一直都在用Spring的@Value注解讀取yml中的配置,這兩天在讀取配置的時(shí)候,想讀取yml中配置的一個(gè)數(shù)組,通過@Vaule一直獲取不到,通過一番資料的查詢,才徹底清楚了@Vaule的使用情況。

在Spring中讀取配置文件的快捷方法常見的有兩種,一個(gè)是通過@Vaule注解進(jìn)行單一字段的注入,另外一種方法就是通過@ConfigurationProperties注解來進(jìn)行批量注入。

@ConfigurationProperties注解屬于SpringBoot,不在SpringFramework里面

這兩種注入方式各有自己的優(yōu)勢(shì)和使用場(chǎng)景。

@Value @ConfigurationProperties
使用場(chǎng)景 單一屬性注入,注解寫在類的屬性上 批量注入,注解寫在類上
松散語法 不支持 支持
SpEL 支持 不支持
JSR303數(shù)據(jù)校驗(yàn)@Validated 不支持 支持
復(fù)雜類型封裝(數(shù)組、Map、對(duì)象等) 不支持 (這么說不嚴(yán)謹(jǐn)) 支持

其實(shí)@Value可以注入任意類型對(duì)象,數(shù)組、Map、List、自定義對(duì)象等。

可以看我對(duì)@Value的注入過程進(jìn)一步的分析

Spring的@Value可以注入復(fù)雜類型嗎?今天教你通過@value注入自定義類型

yml配置文件:

test:
  list:
    - 'a'
    - 'b'
    - 'c'

數(shù)組、Map等都輸入復(fù)雜類型封裝,Value注解無法直接讀取。

但是可以通過@ConfigurationProperties注解讀取

通過@ConfigurationProperties注解讀取

這里分為兩種情況

1、讀取的是配置在application.yml文件中的屬性

只需要在類上加上注解就可以,配置好前綴

@Component
@ConfigurationProperties(prefix = "test")
public class TestYML {
 private String[] list;
 public void test(){
  System.out.println("list:"+list);
 }
 ///  set方法不能少
 public void setList(String[] list) {
  this.list = list;
 }
}

2、如果配置是在一個(gè)單獨(dú)的yml文件中

例如 a.yml。那么此時(shí)還應(yīng)該加上一個(gè)@PropertySource注解,指明來自哪個(gè)配置文件和一個(gè)Factory類

@Component
@PropertySource(value = {"classpath:a.yml"}, factory = YamlPropertySourceFactory.class)
@ConfigurationProperties(prefix = "test")
public class TestYML {
 private String[] list; 
 public void test(){
  System.out.println("list:"+list);  
 }
 ///  set方法不能少
 public String[] getList() {
  return list;
 }
}
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
import java.io.IOException;
import java.util.List;
/**
 * @author KinYang.Lau
 * 用于讀取 yml 類型的文件
 * @date 2020/9/26 7:06 下午
 */
public class YamlPropertySourceFactory extends DefaultPropertySourceFactory {
 @Override
 public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
  if (resource == null) {
   return super.createPropertySource(name, resource);
  }
  List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
  return sources.get(0);
 }
}

同時(shí)還有注意,要有set方法!!!

通過@Value注解變相讀取,曲線救國方案

因?yàn)锧Value注解是支持SpEL表達(dá)式的,所以可以在yml配置文件中,把之前的數(shù)組形式改寫為由字符串形式,例如“a.b.c”

yml文件內(nèi)容

test:
  list: a.b.c
@Value("#{'${test.list}'.split('.')}")
private String[] list2;

這種方法是最簡(jiǎn)單的,不需要單獨(dú)寫一個(gè)類,不用set方法。

如果yml是單獨(dú)的文件的話,只需要在類上添加@PropertySource(value = "classpath:a.yml")注解就行。

注意:

有小伙伴反映,@Value也可以直接注冊(cè)數(shù)組或者結(jié)合。后來我測(cè)試了一下,發(fā)現(xiàn)當(dāng)字符串是以,分割的時(shí)候,就可以注入數(shù)組或者其他集合。 Spring默認(rèn)情況下會(huì)以“,”進(jìn)行分割,轉(zhuǎn)換成對(duì)應(yīng)的數(shù)組或列表。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解

    Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解

    這篇文章主要介紹了使用Sentinel對(duì)熱門詞匯進(jìn)行限流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 深入理解Java虛擬機(jī) JVM 內(nèi)存結(jié)構(gòu)

    深入理解Java虛擬機(jī) JVM 內(nèi)存結(jié)構(gòu)

    本節(jié)將會(huì)介紹一下JVM的內(nèi)存結(jié)構(gòu),JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的各個(gè)組成部分:堆,方法區(qū),程序計(jì)數(shù)器,Java虛擬機(jī)棧,本地方法棧,還會(huì)對(duì)Java堆的分代劃分做個(gè)簡(jiǎn)單的介紹
    2021-09-09
  • 阿里規(guī)范:為何boolean類型變量命名禁用is開頭

    阿里規(guī)范:為何boolean類型變量命名禁用is開頭

    這篇文章主要給大家介紹了關(guān)于阿里規(guī)范:為何boolean類型變量命名禁用is開頭的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 淺談Java中Unicode的編碼和實(shí)現(xiàn)

    淺談Java中Unicode的編碼和實(shí)現(xiàn)

    這篇文章向大家介紹了Java編程中Unicode編碼及實(shí)現(xiàn)的相關(guān)內(nèi)容,列舉了幾個(gè)字符不同表達(dá)式的比較,以及Unicode平面映射的知識(shí),具有一點(diǎn)點(diǎn)參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • 利用Java代碼實(shí)現(xiàn)區(qū)塊鏈技術(shù)

    利用Java代碼實(shí)現(xiàn)區(qū)塊鏈技術(shù)

    這篇文章主要介紹了利用Java代碼實(shí)現(xiàn)區(qū)塊鏈技術(shù),區(qū)塊鏈的應(yīng)用范圍幾乎無窮無盡,關(guān)于區(qū)塊鏈?zhǔn)侨绾芜\(yùn)作的,下文來看看具體的內(nèi)容介紹吧,需要的朋友可以參考一下
    2022-04-04
  • JAVAlogback日志管理詳解

    JAVAlogback日志管理詳解

    本篇文章主要介紹了在SpringBoot中使用Logback管理記錄日志,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-09-09
  • Java微信公眾平臺(tái)之素材管理

    Java微信公眾平臺(tái)之素材管理

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)之素材管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • SpringBoot事務(wù)注解超詳細(xì)講解

    SpringBoot事務(wù)注解超詳細(xì)講解

    這篇文章主要給大家介紹了關(guān)于SpringBoot事務(wù)注解的相關(guān)資料,在Spring Boot中,事務(wù)管理是一個(gè)非常重要的概念,我們可以使用事務(wù)注解來控制事務(wù)的行為,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java List接口與Iterator接口及foreach循環(huán)使用解析

    Java List接口與Iterator接口及foreach循環(huán)使用解析

    這篇文章主要介紹了Java List接口與Iterator接口及foreach循環(huán),主要包括List接口與Iterator接口及foreach循環(huán)具體的使用方法和代碼,需要的朋友可以參考下
    2022-04-04
  • SpringBoot實(shí)現(xiàn)文件上傳接口

    SpringBoot實(shí)現(xiàn)文件上傳接口

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)文件上傳接口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評(píng)論