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

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

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

前言

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

github demo地址: springboot-yml-value

1.什么是yml文件

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

下面是一個(gè)非?;镜膟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屬性獲取配置

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

為了實(shí)現(xiàn)這一點(diǎn),我們將創(chuàng)建一個(gè)@ConfigurationProperties類(lèi)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é)點(diǎn))
 * @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
 }
 
}

請(qǐng)注意,我們可以創(chuàng)建一個(gè)或多個(gè)@ConfigurationProperties類(lèi)。

定義我們的springboot 注冊(cè)配置類(lèi)ApplicationConfig:

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

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

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

3.訪問(wèn)yml屬性

現(xiàn)在可以通過(guò)使用創(chuàng)建的@ConfigurationProperties bean來(lái)訪問(wèn)yml屬性??梢韵袢魏纬R?guī)的Spring bean一樣注入這些屬性bean,測(cè)試類(lèi)如下:

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: 單元測(cè)試類(lèi)
 * @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());
 }
}

測(cè)試結(jié)果如下:

4.總結(jié)

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

5.補(bǔ)充

因?yàn)橛行』锇椴惶宄唧w用途。筆者補(bǔ)充一下兩者的優(yōu)缺點(diǎn)吧。

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

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

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

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

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

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

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

五、缺點(diǎn)是不支持SpEL表達(dá)式;

六、確保強(qiáng)類(lèi)型bean的管理,更方便的驗(yàn)證程序配置;

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

總結(jié)

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

相關(guān)文章

  • SpringBoot2 JPA解決懶加載異常的問(wèn)題

    SpringBoot2 JPA解決懶加載異常的問(wèn)題

    這篇文章主要介紹了SpringBoot2 JPA解決懶加載異常的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Spring常用注解 使用注解來(lái)構(gòu)造IoC容器的方法

    Spring常用注解 使用注解來(lái)構(gòu)造IoC容器的方法

    下面小編就為大家分享一篇Spring常用注解 使用注解來(lái)構(gòu)造IoC容器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • java后臺(tái)如何接收get請(qǐng)求傳過(guò)來(lái)的數(shù)組

    java后臺(tái)如何接收get請(qǐng)求傳過(guò)來(lái)的數(shù)組

    這篇文章主要介紹了java后臺(tái)如何接收get請(qǐng)求傳過(guò)來(lái)的數(shù)組問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java內(nèi)存溢出和內(nèi)存泄露

    Java內(nèi)存溢出和內(nèi)存泄露

    這篇文章主要介紹了Java內(nèi)存溢出和內(nèi)存泄露的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Java實(shí)現(xiàn)的打印螺旋矩陣算法示例

    Java實(shí)現(xiàn)的打印螺旋矩陣算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的打印螺旋矩陣算法,結(jié)合完整實(shí)例形式詳細(xì)分析了java打印螺旋矩陣的算法原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • Spring和activiti進(jìn)行整合過(guò)程解析

    Spring和activiti進(jìn)行整合過(guò)程解析

    這篇文章主要介紹了Spring和activiti進(jìn)行整合過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringCloud使用Feign文件上傳、下載

    SpringCloud使用Feign文件上傳、下載

    這篇文章主要為大家詳細(xì)介紹了SpringCloud使用Feign文件上傳、下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java?多線程并發(fā)ReentrantLock

    Java?多線程并發(fā)ReentrantLock

    這篇文章主要介紹了Java?多線程并發(fā)ReentrantLock,Java?提供了?ReentrantLock?可重入鎖來(lái)提供更豐富的能力和靈活性,感興趣的小伙伴可以參考一下
    2022-06-06
  • Java注解Annotation原理及自定義注解代碼實(shí)例

    Java注解Annotation原理及自定義注解代碼實(shí)例

    這篇文章主要介紹了Java注解Annotation原理及自定義注解代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringCloud?分布式微服務(wù)架構(gòu)操作步驟

    SpringCloud?分布式微服務(wù)架構(gòu)操作步驟

    SpringCloud是一種微服務(wù)的框架,利用它我們可以去做分布式服務(wù)開(kāi)發(fā),這篇文章主要介紹了SpringCloud?分布式微服務(wù)架構(gòu),需要的朋友可以參考下
    2022-07-07

最新評(píng)論