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

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。那么此時還應(yīng)該加上一個@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文件內(nèi)容

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

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

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

注意:

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

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

相關(guān)文章

最新評論

崇左市| 大连市| 渭源县| 宜丰县| 长寿区| 临湘市| 金溪县| 庄河市| 东乌| 波密县| 长顺县| 商城县| 大方县| 义马市| 额济纳旗| 武义县| 张北县| 华坪县| 余干县| 呼伦贝尔市| 唐海县| 黄梅县| 新乡县| 胶南市| 嘉峪关市| 临沂市| 扬州市| 东乌珠穆沁旗| 五河县| 延边| 罗田县| 宽城| 济宁市| 当涂县| 凭祥市| 台北市| 景德镇市| 拉孜县| 巴彦淖尔市| 安岳县| 吉木萨尔县|