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

SpringBoot @ConfigurationProperties使用詳解

 更新時間:2020年02月11日 11:07:14   作者:flydean  
這篇文章主要介紹了SpringBoot @ConfigurationProperties使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介

本文將會詳細講解@ConfigurationProperties在Spring Boot中的使用。

添加依賴關(guān)系

首先我們需要添加Spring Boot依賴:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <relativePath/> <!-- lookup parent from repository -->
</parent>

一個簡單的例子

@ConfigurationProperties需要和@Configuration配合使用,我們通常在一個POJO里面進行配置:

@Data
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {

  private String hostName;
  private int port;
  private String from;
}

上面的例子將會讀取properties文件中所有以mail開頭的屬性,并和bean中的字段進行匹配:

#Simple properties
mail.hostname=host@mail.com
mail.port=9000
mail.from=mailer@mail.com

Spring的屬性名字匹配支持很多格式,如下所示所有的格式都可以和hostName進行匹配:

mail.hostName
mail.hostname
mail.host_name
mail.host-name
mail.HOST_NAME

如果你不想使用@Configuration, 那么需要在@EnableConfigurationProperties注解中手動導入配置文件如下:

@SpringBootApplication
@EnableConfigurationProperties(ConfigProperties.class)
public class ConfigPropApp {
  public static void main(String[] args) {
    SpringApplication.run(ConfigPropApp.class,args);
  }
}

我們也可以在@ConfigurationPropertiesScan中指定Config文件的路徑:

@SpringBootApplication
@ConfigurationPropertiesScan("com.flydean.config")
public class ConfigPropApp {
  public static void main(String[] args) {
    SpringApplication.run(ConfigPropApp.class,args);
  }
}

這樣的話程序只會在com.flydean.config包中查找config文件。

屬性嵌套

我們可以嵌套class,list,map, 下面我們舉個例子,先創(chuàng)建一個普通的POJO:

@Data
public class Credentials {
  private String authMethod;
  private String username;
  private String password;
}

然后創(chuàng)建一個嵌套的配置文件:

@Data
@Configuration
@ConfigurationProperties(prefix = "nestmail")
public class NestConfigProperties {
  private String host;
  private int port;
  private String from;
  private List<String> defaultRecipients;
  private Map<String, String> additionalHeaders;
  private Credentials credentials;
}

對應的屬性文件如下:

# nest Simple properties
nestmail.hostname=mailer@mail.com
nestmail.port=9000
nestmail.from=mailer@mail.com

#List properties
nestmail.defaultRecipients[0]=admin@mail.com
nestmail.defaultRecipients[1]=owner@mail.com

#Map Properties
nestmail.additionalHeaders.redelivery=true
nestmail.additionalHeaders.secure=true

#Object properties
nestmail.credentials.username=john
nestmail.credentials.password=password
nestmail.credentials.authMethod=SHA1

@ConfigurationProperties和@Bean

@ConfigurationProperties也可以和@Bean一起使用如下所示:

@Data
public class Item {
  private String name;
  private int size;
}

看下怎么使用:

@Data
@Configuration
public class BeanConfigProperties {
  @Bean
  @ConfigurationProperties(prefix = "item")
  public Item item() {
    return new Item();
  }
}

屬性驗證

@ConfigurationProperties可以使用標準的JSR-303格式來做屬性驗證。我們舉個例子:

@Data
@Validated
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {

  @NotEmpty
  private String hostName;
  @Min(1025)
  @Max(65536)
  private int port;
  @Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,6}$")
  private String from;
}

如果我們的屬性不滿足上訴條件,可能出現(xiàn)如下異常:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'mail' to com.flydean.config.ConfigProperties$$EnhancerBySpringCGLIB$$f0f87cb9 failed:

  Property: mail.port
  Value: 0
  Reason: 最小不能小于1025

  Property: mail.hostName
  Value: null
  Reason: 不能為空


Action:

Update your application's configuration


Process finished with exit code 1

屬性轉(zhuǎn)換

@ConfigurationProperties也支持多種屬性轉(zhuǎn)換,下面我們以Duration和DataSize為例:

我們定義兩個Duration的字段:

@ConfigurationProperties(prefix = "conversion")
public class PropertyConversion {
 
  private Duration timeInDefaultUnit;
  private Duration timeInNano;
  ...
}

在屬性文件中定義這兩個字段:

conversion.timeInDefaultUnit=10
conversion.timeInNano=9ns

我們看到上面的屬性可以帶單位的??蛇x的單位是:ns, us, ms, s, m, h 和 d,分別對應納秒,微妙,毫秒,秒,分鐘,小時和天。默認單位是毫秒。我們也可以在注解中指定單位:

@DurationUnit(ChronoUnit.DAYS)
private Duration timeInDays;

對應的配置文件如下:

conversion.timeInDays=2

下面我們再看看DataSize怎么使用:

private DataSize sizeInDefaultUnit;
 
private DataSize sizeInGB;
 
@DataSizeUnit(DataUnit.TERABYTES)
private DataSize sizeInTB;

對應的屬性文件:

conversion.sizeInDefaultUnit=300
conversion.sizeInGB=2GB
conversion.sizeInTB=4

Datasize支持B, KB, MB, GB 和TB。

自定義Converter

同樣的Spring Boot也支持自定義屬性轉(zhuǎn)換器。我們先定義一個POJO類:

public class Employee {
  private String name;
  private double salary;
}

對應的屬性文件:

conversion.employee=john,2000

我們需要自己實現(xiàn)一個Converter接口的轉(zhuǎn)換類:

@Component
@ConfigurationPropertiesBinding
public class EmployeeConverter implements Converter<String, Employee> {
 
  @Override
  public Employee convert(String from) {
    String[] data = from.split(",");
    return new Employee(data[0], Double.parseDouble(data[1]));
  }
}

本文的例子可以參看: https://github.com/ddean2009/learn-springboot2/tree/master/springboot-ConfigurationProperties

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

相關(guān)文章

  • RabbitMQ實現(xiàn)延遲通知的兩種方案

    RabbitMQ實現(xiàn)延遲通知的兩種方案

    延遲通知是指消息在發(fā)送后不會立即被消費,而是在指定的時間延遲后才被處理的消息傳遞機制,
    2025-10-10
  • springboot使用@value讀取配置的方法

    springboot使用@value讀取配置的方法

    今天我們來講一下如何通過python來實現(xiàn)自動登陸京東,以及簽到領(lǐng)取金幣。本文圖文實例相結(jié)合給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-10-10
  • Java運行時動態(tài)生成對象的方法小結(jié)

    Java運行時動態(tài)生成對象的方法小結(jié)

    Java是一門靜態(tài)語言,通常,我們需要的class在編譯的時候就已經(jīng)生成了,為什么有時候我們還想在運行時動態(tài)生成class呢?今天通過本文給大家分享Java運行時動態(tài)生成對象的方法小結(jié),需要的朋友參考下吧
    2021-08-08
  • Java使用Arthas查看接口方法的執(zhí)行時間的步驟

    Java使用Arthas查看接口方法的執(zhí)行時間的步驟

    在日常的開發(fā)和運維工作中,經(jīng)常需要監(jiān)控接口方法的執(zhí)行時間,以便排查性能問題或優(yōu)化代碼,Arthas 是一款強大的 Java 診斷工具,可以幫助我們輕松地查看接口方法的執(zhí)行時間,而無需修改代碼或重啟應用,本文將詳細介紹如何使用 Arthas 來查看接口方法的執(zhí)行時間
    2025-05-05
  • 深入解析反編譯字節(jié)碼文件中的代碼邏輯JVM中的String操作

    深入解析反編譯字節(jié)碼文件中的代碼邏輯JVM中的String操作

    這篇文章主要介紹了深入解析反編譯字節(jié)碼文件中的代碼邏輯JVM中的String操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 如何解決Maven出現(xiàn)Could not find artifact的問題

    如何解決Maven出現(xiàn)Could not find artifact的問題

    這篇文章主要介紹了如何解決Maven出現(xiàn)Could not find artifact的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 新手了解java基礎(chǔ)知識(一)

    新手了解java基礎(chǔ)知識(一)

    這篇文章主要介紹了Java基礎(chǔ)知識,本文介紹了Java語言相關(guān)的基礎(chǔ)知識、歷史介紹、主要應用方向等內(nèi)容,需要的朋友可以參考下,希望對你有所幫助
    2021-07-07
  • SpringCloud中分析講解Feign組件添加請求頭有哪些坑梳理

    SpringCloud中分析講解Feign組件添加請求頭有哪些坑梳理

    在spring?cloud的項目中用到了feign組件,簡單配置過后即可完成請求的調(diào)用。又因為有向請求添加Header頭的需求,查閱了官方示例后,就覺得很簡單,然后一頓操作之后調(diào)試報錯...下面我們來詳細了解
    2022-06-06
  • IDEA報錯Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver com.mysql.jdbc.Driver爆紅

    IDEA報錯Caused by: java.lang.ClassNotFoundException:

    這篇文章主要介紹了IDEA報錯Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver com.mysql.jdbc.Driver爆紅,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-10-10
  • Java面試題沖刺第八天--Spring框架2

    Java面試題沖刺第八天--Spring框架2

    這篇文章主要為大家分享了最有價值的三道Spring框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

罗江县| 平凉市| 个旧市| 云和县| 疏勒县| 界首市| 云林县| 山东省| 郴州市| 吉林省| 沭阳县| 黄山市| 紫金县| 广灵县| 寿光市| 汶川县| 衡阳市| 益阳市| 乐清市| 杭锦后旗| 老河口市| 连南| 太和县| 开封县| 湄潭县| 任丘市| 高密市| 会昌县| 沙河市| 观塘区| 富平县| 马公市| 日照市| 即墨市| 共和县| 西吉县| 岱山县| 昔阳县| 天峨县| 新密市| 抚松县|