欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot自動(dòng)配置原理及DataSource的應(yīng)用方式

 更新時(shí)間:2024年07月11日 14:44:17   作者:蠟筆白閣下  
這篇文章主要介紹了Springboot自動(dòng)配置原理及DataSource的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

自動(dòng)配置springboot

自動(dòng)配置功能會(huì)掃描所有引用jar包下的 META-INF/spring.factories 文件

找到其中的 org.springframework.boot.autoconfigure.EnableAutoConfiguration 對(duì)應(yīng)的數(shù)據(jù)

作為自動(dòng)配置類(lèi),然后根據(jù)條件判斷是否加載它們

自動(dòng)配置與DataSource

DataSource 數(shù)據(jù)源的自動(dòng)配置類(lèi)是 DataSourceAutoConfiguration :

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")
@AutoConfigureBefore(SqlInitializationAutoConfiguration.class)
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class,
DataSourceInitializationConfiguration.InitializationSpecificCredentialsDataSourceInitializationConfiguration.class,
DataSourceInitializationConfiguration.SharedCredentialsDataSourceInitializationConfiguration.class })

public class DataSourceAutoConfiguration {}

1.其中 @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) ,表示項(xiàng)目中必須存在 DataSource EmbeddedDatabaseType 這兩個(gè)類(lèi),而 EmbeddedDatabaseType 是在 spring-boot-starter-jdbc 依賴(lài)包中的,所以需要引入

2.連接數(shù)據(jù)庫(kù)需要引入驅(qū)動(dòng)包,比如:mysql-connector-java

3.@EnableConfigurationProperties(DataSourceProperties.class) 表示啟用DataSourceProperties 配置類(lèi),數(shù)據(jù)庫(kù)的配置信息都在這個(gè)配置類(lèi)中

4.Springboot 默認(rèn)數(shù)據(jù)源是HikariDataSource,原因如下:

  • 4.1DataSourceAutoConfiguration 被啟用之后,內(nèi)部存在一個(gè)配置類(lèi):
@Configuration(proxyBeanMethods = false)
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })

protected static class PooledDataSourceConfiguration {}

默認(rèn)情況下,上面的條件都會(huì)滿(mǎn)足,需要關(guān)注 @Import 注解,這里導(dǎo)入了很多配置類(lèi),這些配置類(lèi)上也會(huì)有各種 @Conditional… 條件顯示,默認(rèn)情況下只會(huì)有 DataSourceConfiguration.Hikari.class 配置類(lèi)的條件滿(mǎn)足,如下:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(HikariDataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource",matchIfMissing = true)

static class Hikari {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.hikari")
    HikariDataSource dataSource(DataSourceProperties properties) {
        HikariDataSource dataSource = createDataSource(properties, HikariDataSource.class);
        if (StringUtils.hasText(properties.getName())) {
            dataSource.setPoolName(properties.getName());
        }
        return dataSource;
    }
}

其中可以看到可以通過(guò) spring.datasource.type 設(shè)置要使用的數(shù)據(jù)源類(lèi)型,這里的 matchIfMissing = true 正是 HikariDataSource 成為默認(rèn)數(shù)據(jù)源的關(guān)鍵,它表示如果spring.datasource.type 不配置的話(huà),這個(gè)條件依然滿(mǎn)足。

內(nèi)部加載 HikariDataSource bean 的時(shí)候,可以看到標(biāo)注了配置文件的前綴 spring.datasource.hikari ,其實(shí)這里的 DataSourceProperties 參數(shù)已經(jīng)包含了使用前綴 spring.datasource 配置的數(shù)據(jù)庫(kù)信息,而這些信息會(huì)被傳遞到 HikariDataSource 數(shù)據(jù)源中,而使用前綴 spring.datasource.hikari 的配置信息也會(huì)被應(yīng)用到 HikariDataSource ,如果二者存在重復(fù),spring.datasource.hikari 配置的數(shù)據(jù)會(huì)覆蓋之前的配置。

總結(jié)

以上就是 springboot 配置數(shù)據(jù)源以及HikariDataSource 作為默認(rèn)數(shù)據(jù)源的邏輯,并且springboot 使用了spring.datasource.type 配置,控制了只會(huì)有一個(gè) DataSource 實(shí)例被創(chuàng)建裝載。

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中減少if-else的幾種方式

    Java中減少if-else的幾種方式

    if判斷語(yǔ)句是很多編程語(yǔ)言的重要組成部分,但是,若我們最終編寫(xiě)了大量嵌套的if語(yǔ)句,這將使得我們的代碼更加復(fù)雜和難以維護(hù),本文主要介紹了Java中減少if-else的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot框架集成token實(shí)現(xiàn)登錄校驗(yàn)功能

    SpringBoot框架集成token實(shí)現(xiàn)登錄校驗(yàn)功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot框架集成token實(shí)現(xiàn)登錄校驗(yàn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • SpringBoot實(shí)現(xiàn)配置文件的替換

    SpringBoot實(shí)現(xiàn)配置文件的替換

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)配置文件的替換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • dubbo擴(kuò)展點(diǎn)AOP切面功能擴(kuò)展示例詳解

    dubbo擴(kuò)展點(diǎn)AOP切面功能擴(kuò)展示例詳解

    這篇文章主要為大家介紹了dubbo擴(kuò)展點(diǎn)AOP切面功能擴(kuò)展示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢(xún)和刪除商品類(lèi)別功能實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢(xún)和刪除商品類(lèi)別功能實(shí)現(xiàn)

    SSH框架網(wǎng)上商城項(xiàng)目第8戰(zhàn)之查詢(xún)和刪除商品類(lèi)別功能實(shí)現(xiàn),為項(xiàng)目增加功能,添加、更新、刪除和查詢(xún)操作,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 使用注解開(kāi)發(fā)SpringMVC詳細(xì)配置教程

    使用注解開(kāi)發(fā)SpringMVC詳細(xì)配置教程

    這篇文章主要介紹了使用注解開(kāi)發(fā)SpringMVC詳細(xì)配置教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java網(wǎng)絡(luò)通信基礎(chǔ)編程(必看篇)

    Java網(wǎng)絡(luò)通信基礎(chǔ)編程(必看篇)

    下面小編就為大家?guī)?lái)一篇Java網(wǎng)絡(luò)通信基礎(chǔ)編程(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • java生成圖片驗(yàn)證碼示例代碼

    java生成圖片驗(yàn)證碼示例代碼

    這篇文章主要為大家詳細(xì)介紹了java生成圖片驗(yàn)證碼示例代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 淺析SpringCloud Alibaba-Nacos 作為注冊(cè)中心示例代碼

    淺析SpringCloud Alibaba-Nacos 作為注冊(cè)中心示例代碼

    這篇文章主要介紹了SpringCloud Alibaba-Nacos 作為注冊(cè)中心示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java實(shí)現(xiàn)二叉樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例

    Java實(shí)現(xiàn)二叉樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)二叉樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法,結(jié)合實(shí)例形式詳細(xì)分析了二叉樹(shù)的定義、深度優(yōu)先遍歷與廣度優(yōu)先遍歷算法原理與相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-04-04

最新評(píng)論