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

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

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

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

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

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

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

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

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

可以看我對@Value的注入過程進一步的分析

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

yml配置文件:

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

數(shù)組、Map等都輸入復雜類型封裝,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、如果配置是在一個單獨的yml文件中

例如 a.yml。那么此時還應該加上一個@PropertySource注解,指明來自哪個配置文件和一個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);
 }
}

同時還有注意,要有set方法!!!

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

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

yml文件內容

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

這種方法是最簡單的,不需要單獨寫一個類,不用set方法。

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

注意:

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

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

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

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

    深入理解Java虛擬機 JVM 內存結構

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

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

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

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

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

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

    這篇文章主要介紹了利用Java代碼實現(xiàn)區(qū)塊鏈技術,區(qū)塊鏈的應用范圍幾乎無窮無盡,關于區(qū)塊鏈是如何運作的,下文來看看具體的內容介紹吧,需要的朋友可以參考一下
    2022-04-04
  • JAVAlogback日志管理詳解

    JAVAlogback日志管理詳解

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

    Java微信公眾平臺之素材管理

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

    SpringBoot事務注解超詳細講解

    這篇文章主要給大家介紹了關于SpringBoot事務注解的相關資料,在Spring Boot中,事務管理是一個非常重要的概念,我們可以使用事務注解來控制事務的行為,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    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實現(xiàn)文件上傳接口

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

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

最新評論