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

SpringBoot @ConfigurationProperties使用詳解

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

簡(jiǎn)介

本文將會(huì)詳細(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>

一個(gè)簡(jiǎn)單的例子

@ConfigurationProperties需要和@Configuration配合使用,我們通常在一個(gè)POJO里面進(jìn)行配置:

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

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

上面的例子將會(huì)讀取properties文件中所有以mail開(kāi)頭的屬性,并和bean中的字段進(jìn)行匹配:

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

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

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

如果你不想使用@Configuration, 那么需要在@EnableConfigurationProperties注解中手動(dòng)導(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);
  }
}

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

屬性嵌套

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

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

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

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

對(duì)應(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();
  }
}

屬性驗(yàn)證

@ConfigurationProperties可以使用標(biāo)準(zhǔn)的JSR-303格式來(lái)做屬性驗(yàn)證。我們舉個(gè)例子:

@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為例:

我們定義兩個(gè)Duration的字段:

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

在屬性文件中定義這兩個(gè)字段:

conversion.timeInDefaultUnit=10
conversion.timeInNano=9ns

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

@DurationUnit(ChronoUnit.DAYS)
private Duration timeInDays;

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

conversion.timeInDays=2

下面我們?cè)倏纯碊ataSize怎么使用:

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

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

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

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

自定義Converter

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

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

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

conversion.employee=john,2000

我們需要自己實(shí)現(xiàn)一個(gè)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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

    Java運(yùn)行時(shí)動(dòng)態(tài)生成對(duì)象的方法小結(jié)

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

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

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

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

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

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

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

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

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

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

    在spring?cloud的項(xiàng)目中用到了feign組件,簡(jiǎn)單配置過(guò)后即可完成請(qǐng)求的調(diào)用。又因?yàn)橛邢蛘?qǐng)求添加Header頭的需求,查閱了官方示例后,就覺(jué)得很簡(jiǎn)單,然后一頓操作之后調(diào)試報(bào)錯(cuò)...下面我們來(lái)詳細(xì)了解
    2022-06-06
  • IDEA報(bào)錯(cuò)Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver com.mysql.jdbc.Driver爆紅

    IDEA報(bào)錯(cuò)Caused by: java.lang.ClassNotFoundException:

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

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

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

最新評(píng)論

汝南县| 霍邱县| 正定县| 平舆县| 德令哈市| 峨眉山市| 民和| 明星| 那曲县| 瑞丽市| 虎林市| 鹰潭市| 乌兰浩特市| 孝昌县| 山东| 乌苏市| 香格里拉县| 新宁县| 延吉市| 定日县| 桂东县| 东兰县| 灵武市| 江陵县| 南平市| 防城港市| 青冈县| 泽州县| 公主岭市| 威远县| 眉山市| 洛川县| 宜春市| 静海县| 平顶山市| 江城| 吕梁市| 辽宁省| 抚顺市| 抚宁县| 汽车|