一篇文章輕松了解SpringBoot配置高級
前言
本文介紹的是SpringBoot配置高級部分,課程是跟著黑馬走的,所以會有一些借鑒,當然也是筆記,還會參考一些大佬的分享;這里的SpringBoot配置高級,并不是SpringBoot所有的高級配置;SpringBoot體系(或者說Spring)是十分龐大的,筆者也自知不能窮盡,故而只能把所學的東西拿來記一記,練一練。文章內容如若有誤,還請大家批評指正。
@ConfigurationProperties
@ConfigurationProperties告訴SpringBoot將本類中的所有屬性和配置文件中相關的配置進行綁定;要進行綁定,首先這個類要受Spring管理,spring才能操作里面的數據。
使用場景
場景一:使用@ConfigurationProperties和@Component注解到bean定義類上.
注意,這里是到bean定義類上,這里的bean指的是受Spring管理的bean,而@Component注解就是把一個類當成一個bean注冊到Spring容器中。
自定義一個配置文件:
book: bookName: Spring技術內幕 price: 36.57
定義一個bean:
package com.example.entity; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; package com.example.entity; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @author 不止于夢想 * @date 2022/11/7 18:50 */ @Component//交給Spring容器管理 @ConfigurationProperties(prefix = "book")//加載配置文件,配置前綴表達式 @Data public class Book { //書名 private String bookName; //價格 private double price; }
注意看,此時是有@Component注解的,說明這個bean受Spring容器管理。
測試:
package com.example.springbootconfigureadvanced; import com.example.entity.Book; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringBootConfigureAdvancedApplicationTests { @Autowired Book book; @Test void contextLoads() { } @Test public void toTest(){ System.out.println(book.getPrice()); } }
結果:
此時如果把@component去掉:
直接爆紅了,語法都不給你通過,這說明了要@ConfigurationProperties生效,被注入的bean應該要受Spring管理或者說在Spring容器中。
場景二:使用@ConfigurationProperties和@Bean注解在配置類的Bean定義方法上
解釋一下:如果我們使用注解開發(fā),一般會把第三方技術寫成一個配置類,然后使用@ConfigurationProperties和@Bean注解對其進行注入,從而實現對第三方屬性的綁定。
注意這里的兩個注解使用在方法上,但是要綁定,這個類必須得讓Spring管理,所以需要一個注解來顯示這個類,讓Spring能夠掃描到,以便與可以把其添加到容器中。
新建一個配置類:
package com.example.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author 不止于夢想 * @date 2022/11/7 19:51 */ @Configuration//聲明一個類為配置類,用于取代bean.xml配置文件注冊bean對象。 public class MyConfig { @ConfigurationProperties(prefix = "datasource") @Bean public DruidDataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); return dataSource; } }
添加配置:
dataSource: url: jdbc:mysql://127.0.0.1:3306/springBoot?serverTimezone=UTC
注意這里并沒有用spring.dataSource格式,如果是那樣,倒不如直接在配置文件配好,瞎整配置類干啥。
測試:
package com.example; import com.alibaba.druid.pool.DruidDataSource; import com.example.entity.Book; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class SpringBootConfigureAdvancedApplication { public static void main(String[] args) { //獲取應用上下文配置 ConfigurableApplicationContext context = SpringApplication.run( SpringBootConfigureAdvancedApplication.class, args); DruidDataSource dataSource = context.getBean(DruidDataSource.class); System.out.println(dataSource.getUrl()); } }
這里我們直接在SpringBoot應用類獲取應用上下文配置即可獲取容器中的bean,不用再費勁去測試類整一堆東西;
驗證:
解釋一下,不然不清楚:在上面配置類MyConfig中設置了一個方法,返回值就是數據源對象,就是說使用方法創(chuàng)建了數據源對象,然后使用@Bean把這個方法定義為一個受Spring管理的bean,再使用@ConfigurationProperties(prefix = “datasource”)加載配置文件進入數據源對象,但是這樣還不夠,這個類Spring并不能掃描到,所以使用@Configuration把這個類定義為配置類,這樣就可以加載這個類。
在這里沒有的配置文件中的dataSource只是一個普通的配置。
場景三:使用@ConfigurationProperties注解到普通類,然后再通過@EnableConfigurationProperties定義為Bean。
先說一下@EnableConfigurationProperties的用法:這個注解相當于一個開關,用來開啟配置的綁定,使用這個注解,不用把類手動交給Spring加載成bean,直接在這個注解后面加上你要開啟配置的類的類名.class即可,這個注解會告訴Spring把類加載成bean,并放入容器中。
說白了就是讓@ConfigurationProperties生效。
還是上面的例子:
沒加@EnableConfigurationProperties、也沒有加其他制成bean的注解:
加上@EnableConfigurationProperties
測試:
小結
1、注意三種使用情況,特別是第三種,在后面的原理篇會大量出現
2、@EnableConfigurationProperties是一個開關,用來開啟被@ConfigurationProperties注解注釋而沒有其他生成bean注解的類與配置文件注入的開關。
寬松綁定/松散綁定
@ConfigurationProperties綁定屬性支持屬性名寬松綁定
總的概況就是,只要配置文件的配置的字母數量和字母與被綁定的bean的prefix(前綴)相同都可以綁定,但是注意,prefix的內容全部為小寫。配置文件可以出現大小寫不一致,甚至可以出現各種符號(非abcd這些)。
綁定前綴名命名規(guī)范:僅能使用純小寫字母、數字、下劃線作為合法的字符
舉例:配置文件
dataSource: url: jdbc:mysql://127.0.0.1:3306/springBoot?serverTimezone=UTC
類中:
可以看到,雖然這里的前綴和配置文件完全相同,但是還是不正確的,prefix必須全為小寫。
說完了嗎?說完了,其他的試一下就可以,一通百通。
啊,還有就是:
寬松綁定不支持注解@Value引用單個屬性的方式
總結
到此這篇關于SpringBoot配置高級的文章就介紹到這了,更多相關SpringBoot配置高級內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
完整的醫(yī)院就診掛號系統(tǒng)基于Spring MVC + Spring + MyBatis實現
這篇文章主要介紹了基于Spring MVC + Spring + MyBatis實現的醫(yī)院就診掛號系統(tǒng),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08SpringBoot CommandLineRunner的異步任務機制使用
這篇文章主要介紹了SpringBoot CommandLineRunner的異步任務機制使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08SpringBoot 項目添加 MDC 日志鏈路追蹤的執(zhí)行流程
日志鏈路追蹤就是將一個標志跨線程進行傳遞,在一般的小項目中也就是在你新起一個線程的時候,或者使用線程池執(zhí)行任務的時候會用到,比如追蹤一個用戶請求的完整執(zhí)行流程,本文給大家介紹SpringBoot MDC 日志鏈路追蹤的代碼,感興趣的朋友一起看看吧2021-06-06