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

SpringBoot @ConfigurationProperties使用詳解

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

簡介

本文將會詳細講解@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注解中手動導(dǎo)入配置文件如下:

@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;
}

對應(yīng)的屬性文件如下:

# 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,分別對應(yīng)納秒,微妙,毫秒,秒,分鐘,小時和天。默認單位是毫秒。我們也可以在注解中指定單位:

@DurationUnit(ChronoUnit.DAYS)
private Duration timeInDays;

對應(yīng)的配置文件如下:

conversion.timeInDays=2

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

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

對應(yīng)的屬性文件:

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;
}

對應(yīng)的屬性文件:

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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)讀取不同格式的文件的示例詳解

    Java實現(xiàn)讀取不同格式的文件的示例詳解

    在?Java?開發(fā)中,我們經(jīng)常需要讀取不同類型的文件,包括?Excel?表格文件、"doc"?等,本文將介紹如何使用?Java?讀取這些不同類型的文件,需要的可以參考下
    2024-01-01
  • Kotlin 和 Java 混合開發(fā)入門教程

    Kotlin 和 Java 混合開發(fā)入門教程

    這篇文章主要介紹了入門 Kotlin 和 Java 混合開發(fā),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java集合中的LinkedHashMap使用解析

    Java集合中的LinkedHashMap使用解析

    這篇文章主要介紹了Java集合中的LinkedHashMap使用解析,LinkedHashMap是繼承于HashMap的,所以它的很多屬性和方法都是HashMap中的,那么它是怎么實現(xiàn)有序存儲的呢,需要的朋友可以參考下
    2023-12-12
  • Java實現(xiàn)接月餅小游戲的示例代碼

    Java實現(xiàn)接月餅小游戲的示例代碼

    本文將用Java語言自制一個小游戲:《接月餅小游戲》,游戲規(guī)則為不要被月亮砸到,盡可能地多接月餅。文中的實現(xiàn)代碼講解清晰,感興趣的可以動手試一試
    2022-02-02
  • 如何手寫一個Spring Boot Starter

    如何手寫一個Spring Boot Starter

    這篇文章主要介紹了如何手寫一個Spring Boot Starter,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • 淺談spring方法級參數(shù)校驗(@Validated)

    淺談spring方法級參數(shù)校驗(@Validated)

    這篇文章主要介紹了淺談spring方法級參數(shù)校驗(@Validated),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • JAVA泛型的繼承和實現(xiàn)、擦除原理解析

    JAVA泛型的繼承和實現(xiàn)、擦除原理解析

    這篇文章主要介紹了JAVA泛型的繼承和實現(xiàn)、擦除原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • RocketMQ事務(wù)消息使用與原理詳解

    RocketMQ事務(wù)消息使用與原理詳解

    這篇文章主要為大家介紹了RocketMQ事務(wù)消息的實現(xiàn)原理,在分布式事務(wù)解決方案中,事務(wù)消息也是一個不錯的解決方案,本篇文章將圍繞RocketMQ的事務(wù)消息實現(xiàn)展開描述,需要的朋友可以參考下
    2023-07-07
  • Java中的泛型

    Java中的泛型

    這篇文章主要介紹為何要泛型,如何使用泛型,自定義泛型的方法,泛型類的子類等多方面介紹了JAVA中的泛型,需要的小伙伴請看下文
    2021-08-08
  • java實現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    java實現(xiàn)貪吃蛇游戲代碼(附完整源碼)

    這篇文章主要介紹了java實現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論