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

Spring Boot2讀取配置常用方法代碼實例

 更新時間:2020年11月18日 14:47:35   作者:碼農小胖哥  
這篇文章主要介紹了Spring Boot2讀取配置常用方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1. 前言

在Spring Boot項目中我們經常需要讀取application.yml配置文件的自定義配置,今天就來羅列一下從yaml讀取配置文件的一些常用手段和方法。

2. 使用@Value注解

首先,會想到使用@Value注解,該注解只能去解析yaml文件中的簡單類型,并綁定到對象屬性中去。

felord:
 phone: 182******32
 def:
  name: 碼農小胖哥
  blog: felord.cn
  we-chat: MSW_623
 dev:
  name: 碼農小胖哥
  blog: felord.cn
  we-chat: MSW_623
 type: JUEJIN 

對于上面的yaml配置,如果我們使用@Value注解的話,冒號后面直接有值的key才能正確注入對應的值。例如felord.phone我們可以通過@Value獲取,但是felord.def不行,因為felord.def后面沒有直接的值,它還有下一級選項。另外@Value不支持yaml松散綁定語法,也就是說felord.def.weChat獲取不到felord.def.we-chat的值。

@Value是通過使用Spring的SpEL表達式來獲取對應的值的:

// 獲取 yaml 中 felord.phone的值 并提供默認值 UNKNOWN
@Value("${felord.phone:UNKNOWN}")
private String phone;

@Value的使用場景是只需要獲取配置文件中的某項值的情況下,如果我們需要將一個系列的值進行綁定注入就建議使用復雜對象的形式進行注入了。

3. 使用@ConfigurationProperties注解

@ConfigurationProperties注解提供了我們將多個配置選項注入復雜對象的能力。它要求我們指定配置的共同前綴。比如我們要綁定felord.def下的所有配置項:

package cn.felord.yaml.properties;

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

import static cn.felord.yaml.properties.FelordDefProperties.PREFIX;

/**
 * @author felord.cn
 */
@Data
@ConfigurationProperties(PREFIX)
public class FelordDefProperties {
  static final String PREFIX = "felord.def";
  private String name;
  private String blog;
  private String weChat;
}

我們注意到我們可以使用weChat接收we-chat的值,因為這種形式支持從駝峰camel-case到短橫分隔命名kebab-case的自動轉換。

如果我們使用@ConfigurationProperties的話建議配置類命名后綴為Properties,比如Redis的后綴就是RedisProperties,RabbitMQ的為RabbitProperties。

另外我們如果想進行嵌套的話可以借助于@NestedConfigurationProperty注解實現。也可以借助于內部類。這里用內部類實現將開頭yaml中所有的屬性進行注入:

package cn.felord.yaml.properties;

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

import static cn.felord.yaml.properties.FelordProperties.PREFIX;


/**
 * 內部類和枚舉配置.
 *
 * @author felord.cn
 */
@Data
@ConfigurationProperties(PREFIX)
public class FelordProperties {

  static final String PREFIX = "felord";
  private Def def;
  private Dev dev;
  private Type type;

  @Data
  public static class Def {
    private String name;
    private String blog;
    private String weChat;
  }

  @Data
  public static class Dev {
    private String name;
    private String blog;
    private String weChat;
  }

  public enum Type {
    JUEJIN,
    SF,
    OSC,
    CSDN
  }
}

單獨使用@ConfigurationProperties的話依然無法直接使用配置對象FelordDefProperties,因為它并沒有被注冊為Spring Bean。我們可以通過兩種方式來使得它生效。

3.1 顯式注入Spring IoC

你可以使用@Component、@Configuration等注解將FelordDefProperties注入Spring IoC使之生效。

package cn.felord.yaml.properties;

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

import static cn.felord.yaml.properties.FelordDefProperties.PREFIX;

/**
 * 顯式注入Spring IoC 
 * @author felord.cn
 */
@Data
@Component
@ConfigurationProperties(PREFIX)
public class FelordDefProperties {
  static final String PREFIX = "felord.def";
  private String name;
  private String blog;
  private String weChat;
}

3.2 使用@EnableConfigurationProperties注冊

我們還可以使用注解@EnableConfigurationProperties進行注冊,這樣就不需要顯式聲明配置類為Spring Bean了。

package cn.felord.yaml.configuration;

import cn.felord.yaml.properties.FelordDevProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 使用 {@link EnableConfigurationProperties} 注冊 {@link FelordDevProperties}使之生效
 * @author felord.cn
 */
@EnableConfigurationProperties({FelordDevProperties.class})
@Configuration
public class FelordConfiguration {
}

該注解需要顯式的注冊對應的配置類。

3.3 使用@ConfigurationPropertiesScan掃描

在Spring Boot 2.2.0.RELEASE中提供了一個掃描注解@ConfigurationPropertiesScan。它可以掃描特定包下所有的被@ConfigurationProperties標記的配置類,并將它們進行IoC注入。

package cn.felord.yaml;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

/**
 * {@link ConfigurationPropertiesScan} 同 {@link EnableConfigurationProperties} 二選一
 *
 * @see cn.felord.yaml.configuration.FelordConfiguration
 * @author felord.cn
 */
@ConfigurationPropertiesScan
@SpringBootApplication
public class SpringBootYamlApplication {

  public static void main(String[] args) {
    SpringApplication.run(SpringBootYamlApplication.class, args);
  }
}

這非常適合自動注入和批量注入配置類的場景,但是有版本限制,必須在2.2.0及以上。

3.4 Environment

Spring Boot項目的話也可以通過org.springframework.core.env.Environment 提供的getProperty(String key)來獲取,一般并不是很常用。

4. 總結

日常開發(fā)中單個屬性推薦使用@Value,如果同一組屬性為多個則推薦@ConfigurationProperties。需要補充一點的是@ConfigurationProperties還支持使用JSR303進行屬性校驗。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot集成I18n國際化文件在jar包外生效問題

    SpringBoot集成I18n國際化文件在jar包外生效問題

    這篇文章主要介紹了SpringBoot集成I18n國際化文件在jar包外生效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot中操作Bean的生命周期的方法總結

    SpringBoot中操作Bean的生命周期的方法總結

    在SpringBoot應用中,管理和操作Bean的生命周期是一項關鍵的任務,這不僅涉及到如何創(chuàng)建和銷毀Bean,還包括如何在應用的生命周期中對Bean進行精細控制,本文給大家總結了SpringBoot中操作Bean的生命周期的方法,需要的朋友可以參考下
    2023-12-12
  • maven加入spring框架的詳細教程

    maven加入spring框架的詳細教程

    這篇文章主要介紹了maven加入spring框架的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 解決找不到符號 符號:變量 log問題

    解決找不到符號 符號:變量 log問題

    這篇文章主要介紹了解決找不到符號 符號: 變量 log問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring事件Application Event原理詳解

    Spring事件Application Event原理詳解

    這篇文章主要介紹了Spring 事件Application Event原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java使用Tess4J實現圖像識別方式

    Java使用Tess4J實現圖像識別方式

    這篇文章主要介紹了Java使用Tess4J實現圖像識別方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java實現讀取SFTP服務器指定目錄文件的方法

    Java實現讀取SFTP服務器指定目錄文件的方法

    SFTP是一種在安全通道上傳輸文件的協(xié)議,它是基于SSH(Secure Shell)協(xié)議的擴展,用于在客戶端和服務器之間進行加密的文件傳輸,這篇文章主要介紹了Java實現讀取SFTP服務器指定目錄文件,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Java8中的類型注解淺析

    Java8中的類型注解淺析

    這篇文章主要介紹了Java8中的類型注解淺析,java8之前,注解只能是在聲明的地方所使用,java8里面的注解則可以應用在任何地方,需要的朋友可以參考下
    2014-06-06
  • Java中的clone方法詳解_動力節(jié)點Java學院整理

    Java中的clone方法詳解_動力節(jié)點Java學院整理

    clone顧名思義就是復制, 在Java語言中, clone方法被對象調用,所以會復制對象。下面通過本文給大家介紹java中的clone方法,感興趣的朋友一起看看吧
    2017-06-06
  • SpringBoot整合MyBatis四種常用的分頁方式(詳細總結)

    SpringBoot整合MyBatis四種常用的分頁方式(詳細總結)

    這篇文章詳細給大家總結了SpringBoot整合MyBatis四種常用的分頁方式,文中通過代碼示例為大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07

最新評論

黄大仙区| 舟山市| 常宁市| 东宁县| 库尔勒市| 库车县| 郁南县| 海门市| 乐业县| 昭觉县| 合阳县| 开阳县| 岚皋县| 鄂尔多斯市| 睢宁县| 康保县| 浦城县| 辉县市| 新乡市| 阳朔县| 长汀县| 杭州市| 龙南县| 满城县| 礼泉县| 志丹县| 麦盖提县| 武安市| 新源县| 平乐县| 青川县| 公安县| 锦州市| 清镇市| 平陆县| 元江| 红原县| 扎兰屯市| 新晃| 浮梁县| 华宁县|