1. 程式人生 > >在Spring Boot中使用 @ConfigurationProperties 註解

在Spring Boot中使用 @ConfigurationProperties 註解

@ConfigurationProperties根據型別校驗和管理application中的bean

Spring Boot 使用一些鬆的規則來繫結屬性到@ConfigurationProperties bean 並且支援分層結構(hierarchical structure)。
開始建立一個@ConfigurationProperties bean:

@ConfigurationProperties(locations = "classpath:mail.properties", 
                         ignoreUnknownFields = false, 
                         prefix = "mail")
public class MailProperties { 
  public static class Smtp {  
    private boolean auth;  
    private boolean starttlsEnable;  
    // ... getters and setters 
  }
  @NotBlank private String host;
  private int port;  
  private String from; 
  private String username;
  private String password; 
  @NotNull private Smtp smtp; 
  // ... getters and setters
}

 mail.properties 檔案

mail.host=localhost
mail.port=25
mail.smtp.auth=false
mail.smtp.starttls-enable=false
[email protected]
mail.username=
mail.password=
上例中我們用@ConfigurationProperties註解就可以繫結屬性了。ignoreUnknownFields = false告訴Spring Boot在有屬性不能匹配到宣告的域的時候丟擲異常。開發的時候很方便! prefix 用來選擇哪個屬性的prefix名字來繫結。

請注意setters 和 getters 需要在@ConfigurationProperties bean中建立! 與@Value註解相反, 這帶來了程式碼中的一些困擾 (特別是簡單的業務中,個人觀點).
OK,但是我們需要用屬性來配置 application. 有至少兩種方式來建立@ConfigurationProperties。即可以搭配@Configuration 註解來提供 @Beans 也可以單獨使用並注入 @Configuration bean。
@Configuration
@ConfigurationProperties(locations = "classpath:mail.properties", 
                         prefix = "mail")
public class MailConfiguration { 
  public static class Smtp {
    private boolean auth;
    private boolean starttlsEnable;
    // ... getters and setters
 }

 @NotBlank private String host; 
 private int port;
 private String from; 
 private String username;
 private String password; 

 @NotNull private Smtp smtp; 
 // ... getters and setters  

 @Bean public JavaMailSender javaMailSender() {
  // omitted for readability
 }
}

方案2

我們和上面例子一樣註解屬性,然後用 Spring的@Autowire來注入 mail configuration bean:

@Configuration
@EnableConfigurationProperties(MailProperties.class)
 public class MailConfiguration { 
    @Autowired private MailProperties mailProperties; 

    @Bean public JavaMailSender javaMailSender() {
      // omitted for readability
    }
 }

請注意@EnableConfigurationProperties註解。 這個註解告訴Spring Boot 使能支援@ConfigurationProperties。如果不指定會看到如下異常:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
 No qualifying bean of type [demo.mail.MailProperties] found for dependency:
 expected at least 1 bean which qualifies as autowire candidate for this dependency.
 Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

注意: 還有其他辦法 (Spring Boot 總是有其他辦法!) 讓@ConfigurationProperties beans 被新增 – 用@Configuration或者 @Component註解, 這樣就可以在 component scan時候被發現了。

不過也有采用讀檔案的方式去做的

new ConfigTool().getClass().getResourceAsStream("/config.properties");
這個就不詳細展開了

spring.profiles.active=testdb
application.propreries 裡面可以這樣配置分支來區分線上 
@Profile("testdb")

然後通過這個註解去執行



相關推薦

Spring Boot@ConfigurationProperties註解實現原理原始碼解析

0. 開源專案推薦 Pepper Metrics是我與同事開發的一個開源工具(https://github.com/zrbcool/pepper-metrics),其通過收集jedis/mybatis/httpservlet/dubbo/motan的執行效能統計,並暴露成prometheus等主流時序資料庫相

spring boot註解解釋

@Controller:用在controller,相當於@[email protected]同時使用,用@Controller,可以任意返回html頁面和jsp頁面,也可以返回物件 @RestController在使用的時候,只能返回html的頁面,不能配置jsp的試圖解析器 @R

spring boot@SpringBootApplication註解

spring boot中使用@SpringBootApplication指定類為應用啟動類,自動掃描於當前類同級以及子包下的相應註解註冊為spring beans,在類中main方法中通過SpringApplication的run方法啟動應用。eg:package com.l

spring boot使用註解實現模糊查詢

//模糊查詢(根據姓名和登記日期模糊查詢所有資料) @Select({"select * from putong_rencai where concat(name,dengji_time

Spring-boot@ConfigurationProperties,@Value,@PropertySource

1.利用@ConfigurationProperties獲取配置的值,@ConfigurationProperties是springboot提供的基於安全型別的配置放置。     application.properties spring.redis.host=127.0.0.1

Spring Boot使用 @ConfigurationProperties 註解

@ConfigurationProperties根據型別校驗和管理application中的bean。 Spring Boot 使用一些鬆的規則來繫結屬性到@ConfigurationProperties bean 並且支援分層結構(hierarchical struc

Spring Boot 使用 @ConfigurationProperties 註解

@ConfigurationProperties 主要作用:繫結 application.properties 中的屬性   例如: @Configuration public class DataSourceConfig { //資料來源設定 @Bean(name

Spring Boot使用MyBatis註解配置詳解(1)

sql type .org 實體 sch 整合 PE 匯總 同傳 之前在Spring Boot中整合MyBatis時,采用了註解的配置方式,相信很多人還是比較喜歡這種優雅的方式的,也收到不少讀者朋友的反饋和問題,主要集中於針對各種場景下註解如何使用,下面就對幾種常見的情況舉

spring bootmybatis使用註解進行模糊查詢

cat 遇到 google 使用註解 ring list bat prop ber 小白一枚,spring boot 2.0.5在使用mybatis進行註解模糊查詢時遇到一些低級的錯誤,現記錄下來錯誤示例:“select * from user where name lik

Spring Boot 使用 @Transactional 註解配置事務管理

all arc obj 資料 ror 科學 部分 直接 true 事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支持。Spring 事務管理分為編程式和聲明式的兩種方式。編程式事務指的是通過編碼方式實現事務;聲明式事務基於 AOP,將具體

Spring Boot使用MyBatis註解配置開發詳解

Spring Boot中使用MyBatis註解配置詳解 原創   2018-04-03 宗野       Spring Boot 最近專案原因可能會繼續開始使用

Spring Boot使用MyBatis註解配置詳解

   轉自翟永超 之前在Spring Boot中整合MyBatis時,採用了註解的配置方式,相信很多人還是比較喜歡這種優雅的方式的,也收到不少讀者朋友的反饋和問題,主要集中於針對各種場景下註解如何使用,下面就對幾種常見的情況舉例說明用法。 在做下面的示例之前,先準備一

Spring Boot的快取支援——註解配置與EhCache使用

一 點睛 隨著時間的積累,應用的使用使用者不斷增加,資料規模也越來越大,往往資料庫查詢操作會成為影響使用者使用體驗的瓶頸,此時使用快取往往是解決這一問題非常好的手段之一。 Spring 3開始提供了強大的基於註解的快取支援,可以通過註解配置方式低侵入的給原有Spring應

spring boot 程式碼、註解配置獲取yml、properties檔案的map即鍵值對

一、yml獲取自定義鍵值對 yml中的鍵值對 test: map: key1: value1 key2: value2 key3: value3 pom中的依賴配置 <dependency> <groupId>org.sprin

spring boot的jave註解學習

per xml文件 作者 main pan 學習 boot 一起 logs  在spring中,不僅框架作者會使用java註解,開發者也常使用。   可以隨手給個例子:在org.springframework.boot.autoconfigure.jdbc.DataSo

spring boot 使用有註解的類的靜態方法

1. 在配置檔案中加配置引數 #微信相關資料 wechat: mch_appid: abc122345677 wx_secret: abcyyydffgdd7b95403552c2 m

spring boot+mybatis】註解使用方式(無xml配置)設定自動駝峰明明轉換(mapUnderscoreToCamelCase),IDEAxxDao報錯could not autowi

最近使用spring boot+mybatis,使用IntelliJ IDEA開發,記錄一些問題的解決方法。1、在使用@Mapper註解方式代替XXmapper.xml配置檔案,使用@Select等註解配置sql語句的情況下,如何配置資料庫欄位名到JavaBean實體類屬性命

Spring Boot的快取支援(一)註解配置與EhCache使用

隨著時間的積累,應用的使用使用者不斷增加,資料規模也越來越大,往往資料庫查詢操作會成為影響使用者使用體驗的瓶頸,此時使用快取往往是解決這一問題非常好的手段之一。Spring 3開始提供了強大的基於註解的快取支援,可以通過註解配置方式低侵入的給原有Spring應用增加快取功能,提高資料訪問效能。 在Spr

Spring Boot 使用 @Transactional 註解配置事務管理(轉載)

事務管理是應用系統開發中必不可少的一部分。Spring 為事務管理提供了豐富的功能支援。Spring 事務管理分為程式設計式和宣告式的兩種方式。程式設計式事務指的是通過編碼方式實現事務;宣告式事務基於 AOP,將具體業務邏輯與事務處理解耦。宣告式事務管理使業務程式碼邏輯不受汙

Spring Boot自定義註解+AOP實現主備庫切換

摘要: 本篇文章的場景是做排程中心和監控中心時的需求,後端使用TDDL實現分表分庫,需求:實現關鍵業務的查詢監控,當用Mybatis查詢資料時需要從主庫切換到備庫或者直接連到備庫上查詢,從而減小主庫的壓力,在本篇文章中主要記錄在Spring Boot中通過自定義註解結合AOP實現直接連線備庫查詢。 一.通過A