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

使用Spring從YAML文件讀取內(nèi)容映射為Map方式

 更新時間:2022年02月17日 09:34:24   作者:盲目的拾荒者  
這篇文章主要介紹了使用Spring從YAML文件讀取內(nèi)容映射為Map方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

從YAML文件讀取內(nèi)容映射為Map

如何在Spring Boot中從YAML文件注入到Map。

首先,將對Spring框架中的YAML文件有一些了解。 然后,通過一個實際示例展示如何將YAML屬性綁定到Map。

Spring框架中的YAML文件

使用YAML文件存儲外部配置數(shù)據(jù)是一種常見的做法。 基本上,Spring支持使用YAML文檔作為屬性的替代方法,并在后臺使用SnakeYAML對其進行解析。

看看典型的YAML文件是什么樣的:

server:
? port: 8090
? application:
? ? name: myapplication
? ? url: http://myapplication.com

從上面可以看出,YAML文件是不言自明的,更易于閱讀。 實際上,YAML提供了一種簡潔的方式來存儲分層配置數(shù)據(jù)。

默認情況下,Spring Boot在應(yīng)用程序啟動時從application.properties或application.yml讀取配置屬性。 但是,我們可以使用@PropertySource加載自定義的YAML文件。

既然熟悉了什么是YAML文件,看看如何在Spring Boot中將YAML屬性作為Map注入。

從YAML文件內(nèi)容注入Map

Spring Boot通過提供一個方便的注解@ConfigurationProperties,將數(shù)據(jù)的外部化提升到了一個新的水平。 引入此注解是為了輕松地將配置文件中的外部屬性直接注入Java對象。

接下來將介紹如何使用@ConfigurationProperties注解將YAML屬性綁定到bean類中。

首先,在application.yml中定義一些鍵值屬性:

server:
? application:
? ? name: InjectMapFromYAML
? ? url: http://injectmapfromyaml.dev
? ? description: How To Inject a map from a YAML File in Spring Boot
? config:
? ? ips:
? ? ? - 10.10.10.10
? ? ? - 10.10.10.11
? ? ? - 10.10.10.12
? ? ? - 10.10.10.13
? ? filesystem:
? ? ? - /dev/root
? ? ? - /dev/md2
? ? ? - /dev/md4
? users:?
? ? root:
? ? ? username: root
? ? ? password: rootpass
? ? guest:
? ? ? username: guest
? ? ? password: guestpass

其次,創(chuàng)建一個bean類MapServerProperties來封裝將配置屬性綁定到Maps的邏輯:

@Configuration
@ConfigurationProperties(prefix = "server")
@Data
public class MapServerProperties {
? ? private Map<String, String> application;
? ? private Map<String, List<String>> config;
? ? private Map<String, Credential> users;
? ? @Data
? ? public static class Credential {
? ? ? ? private String username;
? ? ? ? private String password;
? ? }
}

如上面所見,我們用@ConfigurationProperties裝飾了MapServerProperties類。 這樣,告訴Spring將具有指定前綴的所有屬性映射到MapServerProperties的對象。

測試

@RunWith(SpringRunner.class)
@SpringBootTest
public class MapFromYamlIntegrationTest {
? ? @Autowired
? ? private MapServerProperties mapServerProperties;
? ? @Test
? ? public void whenYamlFileProvidedThenInjectSimpleMap() {
? ? ? ? assertThat(mapServerProperties.getApplication())
? ? ? ? ? ? ? ? .containsOnlyKeys("name", "url", "description");
? ? ? ? assertThat(mapServerProperties.getApplication()
? ? ? ? ? ? ? ? .get("name")).isEqualTo("InjectMapFromYAML");
? ? }
? ? @Test
? ? public void whenYamlFileProvidedThenInjectComplexMap() {
? ? ? ? assertThat(mapServerProperties.getConfig()).hasSize(2);
? ? ? ? assertThat(mapServerProperties.getConfig()
? ? ? ? ? ? ? ? .get("ips")
? ? ? ? ? ? ? ? .get(0)).isEqualTo("10.10.10.10");
? ? ? ? assertThat(mapServerProperties.getUsers()
? ? ? ? ? ? ? ? .get("root")
? ? ? ? ? ? ? ? .getUsername()).isEqualTo("root");
? ? }
}

@ConfigurationProperties與@Value

快速比較@ConfigurationProperties和@Value。

盡管兩個注解均可用于從配置文件注入屬性,但它們卻大不相同。 這兩個注釋之間的主要區(qū)別在于,每個注釋具有不同的用途。

簡而言之,@Value允許我們通過鍵直接注入特定的屬性值。 但是,@ConfigurationProperties批注將多個屬性綁定到特定對象,并提供通過映射對象對屬性的訪問。

通常,在注入配置數(shù)據(jù)時,Spring建議在@Value上使用@ConfigurationProperties。 @ConfigurationProperties提供了一種在結(jié)構(gòu)化對象中集中和分組配置屬性的好方法,以后我們可以將其注入其他bean。

配置文件yml中的map形式 

yml中的格式

tes:
  maps: {key1: 12,key2: 34}

或者

tes:
  maps:
    key1: 15
    key2: 2

創(chuàng)建一個類

然后創(chuàng)建對應(yīng)類型的字段(注意下這個類的那兩個注釋了的注解)

package com.etc.lzg;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.Map;
@Data
@Component
//@Configuration //這個我這里雖然存在時能成功,不過我注釋了也是可以的,這個是看網(wǎng)上有人寫就跟著寫上的
//@PropertySource(value = {"classpath:/application.yml"}, encoding = "utf-8") //有的人是寫了這個注解能成功,但是我這邊不能有這個注解,有的話,就連編譯都會報錯
@ConfigurationProperties(prefix = "tes")
public class MapTest {
    private Map<String, String> maps;
}

引用

package com.etc.lzg;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LzgApplicationTests {
    @Autowired
    private MapTest mapTest;
    
    @Test
    public void contextLoads() {
        System.out.println(mapTest.toString());
        System.out.println("key1="+mapTest.getMaps().get("key1"));
    }
}

打印

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

相關(guān)文章

  • IntelliJ IDEA全局內(nèi)容搜索和替換教程圖解

    IntelliJ IDEA全局內(nèi)容搜索和替換教程圖解

    很多朋友在做項目時,會在整個項目里活指定文件夾下進行全局搜索和替換,下面小編給大家?guī)砹薎ntelliJ IDEA全局內(nèi)容搜索和替換教程圖解,需要的朋友參考下吧
    2018-04-04
  • 詳解SpringBoot的Run方法

    詳解SpringBoot的Run方法

    本文給大家介紹了SpringBoot的Run方法,文中通過實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-10-10
  • Java 內(nèi)部類的定義與范例

    Java 內(nèi)部類的定義與范例

    說起內(nèi)部類這個詞,想必很多人都不陌生,但是又會覺得不熟悉。原因是平時編寫代碼時可能用到的場景不多,用得最多的是在有事件監(jiān)聽的情況下,并且即使用到也很少去總結(jié)內(nèi)部類的用法。今天我們就來一探究竟
    2021-11-11
  • Java中枚舉類enum的values()方法舉例詳解

    Java中枚舉類enum的values()方法舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java中枚舉類enum的values()方法舉例詳解,作為一種常用方法,可以在枚舉中對數(shù)組里的枚舉值進行遍歷,這就是values()方法的使用,需要的朋友可以參考下
    2023-11-11
  • 新手易懂的Java客戶管理小項目

    新手易懂的Java客戶管理小項目

    本篇文章是作為一個很適合新手閱讀的初級小項目,客戶管理,它主要實現(xiàn)數(shù)據(jù)庫的增刪查改操作,管理每位客戶的不同信息,如果你也是開始學Java不久,這篇文章將很適合你
    2021-11-11
  • spring boot創(chuàng)建項目包依賴問題的解決

    spring boot創(chuàng)建項目包依賴問題的解決

    本篇文章主要介紹了spring boot創(chuàng)建項目包依賴問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 淺談Servlet的Cookie和Session機制

    淺談Servlet的Cookie和Session機制

    雖然session機制在web應(yīng)用程序中被采用已經(jīng)很長時間了,但是仍然有很多人不清楚session機制的本質(zhì),以至不能正確的應(yīng)用這一技術(shù).本文將詳細討論session以及cookie的工作機制,需要的朋友可以參考下
    2021-05-05
  • IDEA入門級使用教程你居然還在用eclipse?

    IDEA入門級使用教程你居然還在用eclipse?

    上個月,idea的使用量超越eclipse的消息席卷了整個IT界,idea到底好在哪里呢?下面小編通過本文給大家詳細介紹下IDEA入門級使用教程,非常詳細,感興趣的朋友一起看看吧
    2020-10-10
  • 簡單了解Java垃圾回收器的種類

    簡單了解Java垃圾回收器的種類

    這篇文章主要介紹了簡單了解Java垃圾回收器的種類,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 關(guān)于springboot集成swagger及knife4j的增強問題

    關(guān)于springboot集成swagger及knife4j的增強問題

    這篇文章主要介紹了springboot集成swagger以及knife4j的增強,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03

最新評論