亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何更優雅地獲取spring boot yml中的值

發布時間:2020-09-08 03:24:45 來源:腳本之家 閱讀:1165 作者:連理枝_ 欄目:編程語言

前言

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

github demo地址: springboot-yml-value

1.什么是yml文件

application.yml取代application.properties,用來配置數據可讀性更強,尤其是當我們已經制定了很多的層次結構配置的時候。

下面是一個非常基本的yml文件:

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}")注釋,但是隨著配置樹形結構以及數量的增加,代碼可讀性也隨之降低,更不利于bean的管理。筆者發現另一種優雅的方法可以確保強類型bean的管理以及更方便的驗證我們的程序配置。

為了實現這一點,我們將創建一個@ConfigurationProperties類ServerProperties,它映射一組相關的屬性:

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

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

/**
 * @program: simple-demo
 * @description: 映射屬性 (server節點)
 * @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
 }
 
}

請注意,我們可以創建一個或多個@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 {
}

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

3.訪問yml屬性

現在可以通過使用創建的@ConfigurationProperties bean來訪問yml屬性。可以像任何常規的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());
 }
}

測試結果如下:

如何更優雅地獲取spring boot yml中的值

4.總結

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

5.補充

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

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

一)ConfigurationProperties和@Value優缺點

ConfigurationProperties注解的優缺點

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

二、支持獲取復雜的數據類型;

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

四、支持JAVA的JSR303數據校驗;

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

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌南县| 利辛县| 大庆市| 马尔康县| 紫阳县| 天津市| 抚顺县| 古蔺县| 余干县| 治多县| 金山区| 南川市| 麦盖提县| 冷水江市| 漠河县| 全椒县| 莱西市| 比如县| 米脂县| 昭苏县| 长阳| 调兵山市| 阜城县| 沁水县| 临城县| 定兴县| 叶城县| 涪陵区| 利辛县| 鄂尔多斯市| 丹寨县| 开封县| 项城市| 山西省| 江口县| 都昌县| 会宁县| 汨罗市| 涟水县| 兰州市| 望城县|