亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot自動配置原理及DataSource的應用方式

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

自動配置springboot

自動配置功能會掃描所有引用jar包下的 META-INF/spring.factories 文件

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

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

自動配置與DataSource

DataSource 數(shù)據(jù)源的自動配置類是 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 }) ,表示項目中必須存在 DataSource EmbeddedDatabaseType 這兩個類,而 EmbeddedDatabaseType 是在 spring-boot-starter-jdbc 依賴包中的,所以需要引入

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

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

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

  • 4.1DataSourceAutoConfiguration 被啟用之后,內(nè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 {}

默認情況下,上面的條件都會滿足,需要關注 @Import 注解,這里導入了很多配置類,這些配置類上也會有各種 @Conditional… 條件顯示,默認情況下只會有 DataSourceConfiguration.Hikari.class 配置類的條件滿足,如下:

@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;
    }
}

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

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

總結

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

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

相關文章

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

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

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

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

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

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

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

    dubbo擴展點AOP切面功能擴展示例詳解

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

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

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

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

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

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

    下面小編就為大家?guī)硪黄狫ava網(wǎng)絡通信基礎編程(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java生成圖片驗證碼示例代碼

    java生成圖片驗證碼示例代碼

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

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

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

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

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

最新評論