最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

自動配置springboot

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

找到其中的 org.springframework.boot.autoconfigure.EnableAutoConfiguration 對應(yīng)的數(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 }) ,表示項(xiàng)目中必須存在 DataSource EmbeddedDatabaseType 這兩個類,而 EmbeddedDatabaseType 是在 spring-boot-starter-jdbc 依賴包中的,所以需要引入

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

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

4.Springboot 默認(rèn)數(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 {}

默認(rèn)情況下,上面的條件都會滿足,需要關(guān)注 @Import 注解,這里導(dǎo)入了很多配置類,這些配置類上也會有各種 @Conditional… 條件顯示,默認(rèn)情況下只會有 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è)置要使用的數(shù)據(jù)源類型,這里的 matchIfMissing = true 正是 HikariDataSource 成為默認(rèn)數(shù)據(jù)源的關(guān)鍵,它表示如果spring.datasource.type 不配置的話,這個條件依然滿足。

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

總結(jié)

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

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

相關(guān)文章

  • 2023最新版本idea用maven新建web項(xiàng)目(親測不報錯)

    2023最新版本idea用maven新建web項(xiàng)目(親測不報錯)

    這篇文章主要給大家介紹了關(guān)于2023最新版本idea用maven新建web項(xiàng)目,Maven是當(dāng)今Java開發(fā)中主流的依賴管理工具,文中介紹的步驟親測不報錯,需要的朋友可以參考下
    2023-07-07
  • Spring?bean配置單例或多例模式方式

    Spring?bean配置單例或多例模式方式

    這篇文章主要介紹了Spring?bean配置單例或多例模式方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JPA設(shè)置默認(rèn)字段及其長度詳解

    JPA設(shè)置默認(rèn)字段及其長度詳解

    JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實(shí)體對象持久化到數(shù)據(jù)庫中。本文主要介紹了JPA如何設(shè)置默認(rèn)字段及其長度,感興趣的同學(xué)可以了解一下
    2021-12-12
  • java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼

    java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼

    本篇文章主要介紹了java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 解讀@Data注解父子類繼承的問題

    解讀@Data注解父子類繼承的問題

    在Java開發(fā)中,使用Lombok庫的@Data注解簡化了代碼,但在父子類繼承關(guān)系中使用@Data注解時會遇到問題,主要問題是:當(dāng)父類和子類都使用@Data注解時,會導(dǎo)致equals方法不對稱,解決方案是在子類中使用@EqualsAndHashCode注解
    2024-11-11
  • 帶你重新認(rèn)識Java動態(tài)代理

    帶你重新認(rèn)識Java動態(tài)代理

    這篇文章主要為大家介紹了Java的動態(tài)代理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Java動態(tài)顯示當(dāng)前日期和時間

    Java動態(tài)顯示當(dāng)前日期和時間

    這篇文章主要為大家詳細(xì)介紹了Java動態(tài)顯示當(dāng)前日期和時間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • MyBatis-Plus?Page?分頁不生效的問題解決

    MyBatis-Plus?Page?分頁不生效的問題解決

    分頁是常見的一種功能,本文主要介紹了MyBatis-Plus?Page分頁不生效的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • java中實(shí)現(xiàn)一個定時任務(wù)的方式

    java中實(shí)現(xiàn)一個定時任務(wù)的方式

    本文介紹了三種在Java中實(shí)現(xiàn)定時任務(wù)的方法,并推薦使用Spring Boot注解方式,介紹了如何使用`@Scheduled`注解結(jié)合Cron表達(dá)式來設(shè)置定時任務(wù),并提供了一個示例配置文件
    2025-03-03
  • SpringMVC post請求中文亂碼問題解決

    SpringMVC post請求中文亂碼問題解決

    這篇文章主要介紹了SpringMVC post請求中文亂碼問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

永城市| 石门县| 平遥县| 利津县| 通河县| 探索| 肥东县| 罗甸县| 冀州市| 勐海县| 仁布县| 腾冲县| 嘉荫县| 沁源县| 阿坝| 永顺县| 娄烦县| 肥西县| 吉安县| 上杭县| 河南省| 长兴县| 晋城| 四子王旗| 微山县| 花垣县| 海丰县| 宁城县| 抚宁县| 华亭县| 威信县| 连州市| 宜兴市| 万年县| 大同市| 林周县| 阿拉善右旗| 江源县| 通榆县| 安塞县| 车致|