1. 程式人生 > >spring-boot @ConfigurationProperties腦洞真大

spring-boot @ConfigurationProperties腦洞真大

               搞了一陣子C++,以前感覺C++很牛,現在怎麼覺得這東西這麼落後了,很多理念完全跟不上時代,關鍵相容性讓人抓狂了。。。只能說一切為了效率。。。

               來看看spring-boot,完全是魔術啊,覺得spring的腦洞真大啊,來說一下今天的主角@ConfigurationProperties。

       概述

                我們知道,從spring-boot開始,已經支援yml檔案形式的配置,@ConfigurationProperties的大致作用就是通過它可以把properties或者yml配置直接轉成物件。

       配置檔案轉成物件

          Relaxed binding

                 用@ConfigurationProperties是支援“鬆綁定”的,我們不必每個字都和配置中的key一致。官網給出了兩個例子,e.g. context-path binds to contextPath和e.g. PORT binds to port

   集合的處理

                如果在配置中需要配置集合的話,我們需要使用“-”符號

                比如:

poolConfig: 
      - maxIdle: 8
      - minIdle: 0
      - maxActive: 8
      - maxWait: -1

          元資料(Meta-data)

                 @ConfigurationProperties還支援spring元資料,可以在resource下建立META-INF資料夾,然後建立檔案additional-spring-configuration-metadata.json。裡面的資料格式必須滿足spring的元資料格式http://docs.spring.io/spring-boot/docs/1.5.3.RELEASE/reference/htmlsingle/#configuration-metadata

                  接下來我們來看個例子

                  yml配置如下:

spring: 
  redis: 
    dbIndex: 0
    hostName: 192.168.58.133
    password: nmamtf
    port: 6379
    timeout: 0
    poolConfig: 
      - maxIdle: 8
      - minIdle: 0
      - maxActive: 8
      - maxWait: -1
                   

                    定義被轉換的物件

@Component
@ConfigurationProperties(prefix="spring.redis")  
public class RedisProps {

	private int dbIndex;
	@NotNull
	private String hostname;
	private String password;
	@NotNull
	private int port;
	private long timeout;
	private List<Map<String,String>> poolConfig;
	
	public int getDbIndex() {
		return dbIndex;
	}
	public void setDbIndex(int dbIndex) {
		this.dbIndex = dbIndex;
	}
	public String getHostname() {
		return hostname;
	}
	public void setHostname(String hostname) {
		this.hostname = hostname;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getPort() {
		return port;
	}
	public void setPort(int port) {
		this.port = port;
	}
	public long getTimeout() {
		return timeout;
	}
	public void setTimeout(long timeout) {
		this.timeout = timeout;
	}
	public List<Map<String, String>> getPoolConfig() {
		return poolConfig;
	}
	public void setPoolConfig(List<Map<String, String>> poolConfig) {
		this.poolConfig = poolConfig;
	}
	
}

                 這樣該物件的成員變數會被自動賦值,可以在其他地方進行注入

        直接注入配置到java config中

                  如果你嫌上面還麻煩,那麼接下來的這個功能絕對讓你驚豔。

                  該功能在官方文件是沒有提到的,我們可以把@ConfigurationProperties和@Bean和在一起使用。

                  舉個例子,我們需要用@Bean配置一個Config物件,Config物件有a,b,c成員變數需要配置,那麼我們只要在yml或properties中定義了a=1,b=2,c=3,然後通過@ConfigurationProperties就能把值注入進Config物件中。這是魔術嗎?

                  下面我用實際的程式碼舉個例子

                   yml配置檔案修改如下

server:
  port: 8080

spring: 
  redis: 
    dbIndex: 0
    hostName: 192.168.58.133
    password: nmamtf
    port: 6379
    timeout: 0
    poolConfig: 
      maxIdle: 8
      minIdle: 0
      maxActive: 8
      maxWait: -1

                       接著我們用@ConfigurationProperties來配置redis
@Configuration  
@EnableAutoConfiguration
public class RedisConfig {
	
    @Bean  
    @ConfigurationProperties(prefix="spring.redis.poolConfig")  
    public JedisPoolConfig getRedisConfig(){  
        JedisPoolConfig config = new JedisPoolConfig();
        return config;  
    }  
      
    @Bean  
    @ConfigurationProperties(prefix="spring.redis")  
    public JedisConnectionFactory getConnectionFactory(){  
        JedisConnectionFactory factory = new JedisConnectionFactory();  
        factory.setUsePool(true);
        JedisPoolConfig config = getRedisConfig();  
        factory.setPoolConfig(config);  
        return factory;  
    }  
      
      
    @Bean  
    public RedisTemplate<?, ?> getRedisTemplate(){  
        RedisTemplate<?,?> template = new StringRedisTemplate(getConnectionFactory());  
        return template;  
    }  
	
}
                注意,其中JedisConnectionFactory中包含dbIndex,hostName,password,port,timeout,poolConfig幾個成員變數。JedisPoolConfig包含maxIdle,minIdle,maxActive,maxWait幾個成員變數。

       @ConfigurationProperties和@Value比較

                它們兩個都能把配置檔案的值直接注入到程式碼,那麼它們的區別是什麼呢,怎麼選擇呢,直接拿官方的表格一下就清楚了

Feature @ConfigurationProperties @Value

相關推薦

spring-boot @ConfigurationProperties

               搞了一陣子C++,以前感覺C++很牛,現在怎麼覺得這東西這麼落後了,很多理念完全跟不上時代,關鍵相容性讓人抓狂了。。。只能說一切為了效率。。。                來看看spring-boot,完全是魔術啊,覺得spring的腦洞真大

程式設計師桌面都長什麼樣?,第四個是“”程式設計師

電腦桌面,那是作為一個IT人士,展示個性的地方,作為一名程式設計師,工作壓力大,還得找個地方釋放釋放,於是電腦桌面,就成了一個不錯的地方。 在這裡相信有許多想要學習前端的同學,關注小編文章最後面文字,可免費領取一整套系統的web前端學習教程!   當屬性滿滿的程式設計師們

狗年特別篇:賣萌的狗遊戲,不如體驗夠萌

oss 引爆 cee 體驗 加速 height sof 又一 2010年 大年初一的狗年特別篇《狗年第一天,必須向20年前的經典狗狗遊戲致敬》推出後,就有朋友立刻補足了遺憾。誰說沒有用狗狗做主角的大作,至少有2個:其一是任天堂推出的掌遊《任天狗》,另一個則是一家韓國公司的網

spring boot @ConfigurationProperties vs @Value

spirng boot @ConfigurationPrope @Value 在spring boot的使用中,通過@ConfigurationProperties 和 @Value 兩個註解可以給類賦值,但是兩個的使用方式還是有些不同的,以下是官方說明以及自己在使用中的簡介。 1.根據他們

Spring Boot————@ConfigurationProperties的@Value區別

引言 Spring Boot從配置檔案中取值的方式有兩種,一種是批量注入@ConfigurationProperties,另一種是單獨注入@Value。 它們之間除了批量與單獨取值的區別之外,還存在著其他一些使用方式,本篇部落格將詳細講解這兩種註解之間的區別和使用方式。 區別比較

Spring boot @ConfigurationProperties和@EnableConfigurationProperties 作用

本文轉載於https://blog.csdn.net/u010502101/article/details/78758330 @ConfigurationProperties註解主要用來把properties配置檔案轉化為bean來使用的,而@EnableConfigurationPropert

Spring Boot @ConfigurationProperties使用指導

簡單屬性 exc add .class 簡單 cred 一個 創建 bject 1.簡介 Spring Boot的一個非常有用的功能是外部化配置,並且可以輕松訪問屬性文件中定義的屬性。 我們現在將詳細地探索@ConfigurationProperties註釋。 2.設

spring boot 錯誤,求神幫解決

file from ast posit 解決 method tee class cep Exception in thread "main" java.lang.IllegalStateException: Failed to read Class-Path attribu

最近大家都在熱議“替人擋酒交朋友”,這個還可以開的更……

嚴格 先驅 文化 height water san o2o vpd 交朋友 據媒體報道,近日,e代駕推出“e代喝”業務,即通過互聯網LBS定位,開放用戶互交功能,實現代喝功能。e代駕相關負責人表示,對於e代駕來說,能夠通過e代喝在串聯起海量用戶社交訴求的同時, 殺向社交領域

spring boot 文件上傳 文件過 FileUploadBase$SizeLimitExceed

prop post class exce 1.4 part tip exc log application.properties中加入 multipart.maxFileSizemultipart.maxRequestSize Spring Boot 1.3.x或者之前 m

不是一般!肆虐《絕地求生》的外掛還有這種操作?

去那 商品 lin rap word-wrap 話題 替代 極客 nor 作為2017年最熱的遊戲,《絕地求生:大逃殺》(俗稱“吃雞遊戲”)的火爆,不僅壓掉了《王者榮耀》,也讓昔日遊戲界的無敵IP《魔獸世界》有些黯然失色,形成了一個獨特的“吃雞”現象。然而,要來的遲早要來,

遊戲私服還有這樣的創意用法?這真的是開了

私服過年的時候,和一些返鄉的遊戲圈好友茶話,天南海北的調侃著年終獎、吃雞遊戲和營銷創意之類的話題,然後就從泛濫的吃雞外掛扯到了私服上。私服是什麽?就是未經版權擁有者授權,非法獲得服務器端安裝程序之後設立的網絡服務器。簡單來說就是盜版網遊,或者說“玩了一個假遊戲”,但並非山寨。對於擺明就是盜版的東西,一位朋友卻

“軟件凈化”也是門生意,想想也是

軟件凈化4月間,360安全衛士做了一個“小升級”——推出了個“軟件凈化”功能。咋一看,這似乎和360從創立伊始就一直在堅持的消滅流氓軟件的初心,並沒什麽特別值得念叨的。但,這背後藏著一門用戶黏性的大生意,無他,流氓軟件們升級了,殺入了隱秘戰線裏,讓許多殺軟都有點下不去手。此時,軟件凈化就變得至關重要了。唯有如

spring boot 使用@ConfigurationProperties

返回 進行 rem AD 實體 public name 綁定 efi 有時候有這樣子的情景,我們想把配置文件的信息,讀取並自動封裝成實體類,這樣子,我們在代碼裏面使用就輕松方便多了, 這時候,我們就可以使用@ConfigurationProperties,它可以把同類的配置

資料新增非同步解析重新整理資料量redis (——)(三)Spring Boot普通類呼叫bean【從零開始學Spring Boot

部落格分類:  從零開始學Spring Boot 從零開始學Spring BootSpring Boot普通類呼叫bean    【視訊&交流平臺】 à SpringBoot視訊 http://stu

Spring Boot修改最上傳檔案限制:The field file exceeds its maximum permitted size of 1048576 bytes.

SpringBoot做檔案上傳時出現了The field file exceeds its maximum permitted size of 1048576 bytes.錯誤,顯示檔案的大小超出了允許的範圍。查看了官方文件,原來Spring Boot工程嵌入的tomcat限制了請求的檔案大小,這一

程式設計師一段程式碼慘遭老闆解僱,網友:簡直開啊

程式設計師之間也存在著很大的差別。工作經驗,編碼能力等都有很多的差別。當然程式設計師的工作也與bug是不離不棄的。 小編最近逛論壇看到一貼。一程式設計師發帖晒出一段排序程式碼,具體如下 這段程式碼卻讓他遭到老闆辭退!看完這段程式碼後,網友們肯定有很多看法吧! 小編相信

Spring Boot(07)——ConfigurationProperties介紹

ConfigurationProperties介紹 ConfigurationProperties是一個註解,可以標註在一個Class上,這樣Spring Boot會從Environment中獲取其屬性對應的屬性值給其進行注入。比如下面的程式碼定義中,Spring Boot在例項化TestConfigura

Spring Boot配置檔案詳解-ConfigurationProperties和Value優缺點-(轉)好文

文章轉自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了兩種常用的配置檔案,分別是properties檔案和yml檔案。他們的作用都是修改Spring Boot自動配置的預設值。相對於properties檔案而言,yml檔

spring boot 配置檔案properties,yml語法學習及屬性獲取@ConfigurationProperties和@Value

1 概述 SpringBoot使用一個全域性的配置檔案,配置檔名是固定的;當我們建立一個專案時會在resource目錄下出現一個預設的配置檔案application.properties 我們可以在裡面進行一些引數的配置,當然還有另外一種方式yml檔案application.yml(