<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文介紹的是SpringBoot設定高階部分,課程是跟著黑馬走的,所以會有一些借鑑,當然也是筆記,還會參考一些大佬的分享;這裡的SpringBoot設定高階,並不是SpringBoot所有的高階設定;SpringBoot體系(或者說Spring)是十分龐大的,筆者也自知不能窮盡,故而只能把所學的東西拿來記一記,練一練。文章內容如若有誤,還請大家批評指正。
@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定義方法上
解釋一下:如果我們使用註解開發,一般會把第三方技術寫成一個設定類,然後使用@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中設定了一個方法,返回值就是資料來源物件,就是說使用方法建立了資料來源物件,然後使用@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這些)。
繫結字首名命名規範:僅能使用純小寫字母、數位、下劃線作為合法的字元
舉例:組態檔
dataSource: url: jdbc:mysql://127.0.0.1:3306/springBoot?serverTimezone=UTC
類中:
可以看到,雖然這裡的字首和組態檔完全相同,但是還是不正確的,prefix必須全為小寫。
說完了嗎?說完了,其他的試一下就可以,一通百通。
啊,還有就是:
寬鬆繫結不支援註解@Value參照單個屬性的方式
到此這篇關於SpringBoot設定高階的文章就介紹到這了,更多相關SpringBoot設定高階內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45