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

如何更優(yōu)雅地獲取spring boot yml中的值

 更新時間:2019年06月05日 11:21:06   作者:連理枝_  
這篇文章主要給大家介紹了關(guān)于如何更優(yōu)雅地獲取spring boot yml中值的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用spring boot具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧

前言

偶然看到國外論壇有人在吐槽同事從配置文件獲取值的方式,因此查閱了相關(guān)資料發(fā)現(xiàn)確實有更便于管理更優(yōu)雅的獲取方式。

github demo地址: springboot-yml-value

1.什么是yml文件

application.yml取代application.properties,用來配置數(shù)據(jù)可讀性更強,尤其是當我們已經(jīng)制定了很多的層次結(jié)構(gòu)配置的時候。

下面是一個非?;镜膟ml文件:

server:
 url: http://localhost 
 myapp:
  name: MyApplication
  threadCount: 4
...

等同于以下的application.properties文件:

server.url=http://localhost
server.myapp.name=MyApplication
server.myapp.threadCount=4
...

demo中的yml文件如下:

server:
 url: http://myapp.org 
 app:
  name: MyApplication
  threadCount: 10
  users: 
   - Jacob
   - James

2.yml屬性獲取配置

訪問yml屬性的一種方法是使用@Value("$ {property}")注釋,但是隨著配置樹形結(jié)構(gòu)以及數(shù)量的增加,代碼可讀性也隨之降低,更不利于bean的管理。筆者發(fā)現(xiàn)另一種優(yōu)雅的方法可以確保強類型bean的管理以及更方便的驗證我們的程序配置。

為了實現(xiàn)這一點,我們將創(chuàng)建一個@ConfigurationProperties類ServerProperties,它映射一組相關(guān)的屬性:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: simple-demo
 * @description: 映射屬性 (server節(jié)點)
 * @author: CaoTing
 * @date: 2019/6/3
 **/
@Data
@ConfigurationProperties("server")
public class ServerProperties {
 
 private String url;
 
 private final App app = new App();
 
 public App getApp() {
  return app;
 }
 
 public static class App {
 
  private String name;
  private String threadCount;
  private List<String> users = new ArrayList<>();
  // TODO getter and setter
 }
 
}

請注意,我們可以創(chuàng)建一個或多個@ConfigurationProperties類。

定義我們的springboot 注冊配置類ApplicationConfig:

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @program: simple-demo
 * @description: 注冊所有映射屬性類 { }中用逗號分隔即可注冊多個屬性類
 * @author: CaoTing
 * @date: 2019/6/3
 **/
@Configuration
@EnableConfigurationProperties({ServerProperties.class})
public class ApplicationConfig {
}

這里已經(jīng)提到了要在@EnableConfigurationProperties中注冊的屬性類列表。

3.訪問yml屬性

現(xiàn)在可以通過使用創(chuàng)建的@ConfigurationProperties bean來訪問yml屬性。可以像任何常規(guī)的Spring bean一樣注入這些屬性bean,測試類如下:

import com.caotinging.ymldemo.application.YmlValueApplication;
import com.caotinging.ymldemo.config.ServerProperties;
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.SpringJUnit4ClassRunner;

/**
 * @program: simple-demo
 * @description: 單元測試類
 * @author: CaoTing
 * @date: 2019/6/3
 **/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = YmlValueApplication.class)
public class AppYmlValueTest {

 @Autowired
 private ServerProperties config;

 @Test
 public void printConfigs() {
   System.out.println(this.config.getUrl());
   System.out.println(this.config.getApp().getName());
   System.out.println(this.config.getApp().getThreadCount());
   System.out.println(this.config.getApp().getUsers());
 }
}

測試結(jié)果如下:

4.總結(jié)

歡迎移步github上手測試哦,地址在文首。有幫助的話點個贊吧,筆芯。轉(zhuǎn)載需附上原文鏈接。

5.補充

因為有小伙伴不太清楚具體用途。筆者補充一下兩者的優(yōu)缺點吧。

Spring Boot通過ConfigurationProperties注解從配置文件中獲取屬性。從上面的例子可以看出ConfigurationProperties注解可以通過設(shè)置prefix指定需要批量導(dǎo)入的數(shù)據(jù)。支持獲取字面值,集合,Map,對象等復(fù)雜數(shù)據(jù)。ConfigurationProperties注解還有其他特點呢?它和Spring的Value注解又有什么區(qū)別呢?

一)ConfigurationProperties和@Value優(yōu)缺點

ConfigurationProperties注解的優(yōu)缺點

一、可以從配置文件中批量注入屬性;

二、支持獲取復(fù)雜的數(shù)據(jù)類型;

三、對屬性名匹配的要求較低,比如user-name,user_name,userName,USER_NAME都可以取值;

四、支持JAVA的JSR303數(shù)據(jù)校驗;

五、缺點是不支持SpEL表達式;

六、確保強類型bean的管理,更方便的驗證程序配置;

Value注解的優(yōu)缺點正好相反,它只能一個個配置注入值;不支持數(shù)組、集合等復(fù)雜的數(shù)據(jù)類型;不支持數(shù)據(jù)校驗;對屬性名匹配有嚴格的要求。最大的特點是支持SpEL表達式,使其擁有更豐富的功能。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 淺談springMVC接收前端json數(shù)據(jù)的總結(jié)

    淺談springMVC接收前端json數(shù)據(jù)的總結(jié)

    下面小編就為大家分享一篇淺談springMVC接收前端json數(shù)據(jù)的總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot項目實現(xiàn)分布式日志鏈路追蹤

    SpringBoot項目實現(xiàn)分布式日志鏈路追蹤

    這篇文章主要給大家介紹了Spring Boot項目如何實現(xiàn)分布式日志鏈路追蹤,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 淺談java Collection中的排序問題

    淺談java Collection中的排序問題

    下面小編就為大家?guī)硪黄獪\談java Collection中的排序問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放

    SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放

    FFmpeg是一個開源跨平臺的多媒體處理工具套件,它支持音頻、視頻文件的編碼、解碼、流媒體傳輸以及轉(zhuǎn)換等多種操作,本文小編給大家介紹了SpringBoot使用FFmpeg實現(xiàn)M3U8切片轉(zhuǎn)碼播放的操作,需要的朋友可以參考下
    2024-08-08
  • SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

    SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

    本篇文章主要介紹了SpringBoot 實戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • SpringCloud項目中Feign組件添加請求頭所遇到的坑及解決

    SpringCloud項目中Feign組件添加請求頭所遇到的坑及解決

    這篇文章主要介紹了SpringCloud項目中Feign組件添加請求頭所遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java簡化復(fù)雜系統(tǒng)調(diào)用的門面設(shè)計模式

    Java簡化復(fù)雜系統(tǒng)調(diào)用的門面設(shè)計模式

    Java門面模式是一種結(jié)構(gòu)性設(shè)計模式,它為復(fù)雜系統(tǒng)提供了一個簡單的接口,使得系統(tǒng)的客戶端能夠更加方便地使用系統(tǒng)功能。門面模式通過封裝復(fù)雜的子系統(tǒng),隱藏系統(tǒng)的實現(xiàn)細節(jié),提高了系統(tǒng)的易用性和靈活性
    2023-04-04
  • SpringMVC與前端交互案例教程

    SpringMVC與前端交互案例教程

    本篇文章主要介紹了SpringMVC前端和后端數(shù)據(jù)交互總結(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下。希望能給你帶來幫助
    2021-07-07
  • Java實現(xiàn)Twitter的分布式自增ID算法snowflake

    Java實現(xiàn)Twitter的分布式自增ID算法snowflake

    這篇文章主要介紹了Java實現(xiàn)Twitter的分布式自增ID算法snowflake,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-08-08
  • 面試必時必問的JVM 類加載機制詳解

    面試必時必問的JVM 類加載機制詳解

    這篇文章主要介紹了一文讀懂Jvm類加載機制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2021-08-08

最新評論

孟连| 文成县| 广昌县| 苍溪县| 县级市| 陆良县| 防城港市| 西畴县| 织金县| 莱州市| 肇东市| 海丰县| 安多县| 闻喜县| 三门县| 德钦县| 辉县市| 奉新县| 都兰县| 松原市| 临邑县| 临海市| 喀喇| 西丰县| 鸡西市| 洛浦县| 霍林郭勒市| 靖州| 宁安市| 南雄市| 英德市| 永州市| 禹州市| 阜阳市| 怀安县| 星座| 垦利县| 来凤县| 昌邑市| 黑水县| 海南省|