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

MyBatis 自帶連接池的具體實現(xiàn)

 更新時間:2024年12月04日 10:20:39   作者:這孩子叫逆  
MyBatis自帶的PooledDataSource實現(xiàn)了一個簡單的數(shù)據(jù)庫連接池,適合簡單場景,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

MyBatis 本身并不提供專門的連接池實現(xiàn),但它可以通過內(nèi)置的 PooledDataSource 類提供一個簡單的數(shù)據(jù)庫連接池。這個連接池實現(xiàn)非?;A(chǔ),適合一些簡單場景,但對于生產(chǎn)環(huán)境,通常建議使用第三方的成熟連接池,如 HikariCP、Apache DBCP 或 C3P0 等。

1. MyBatis 自帶的連接池 PooledDataSource

PooledDataSource 是 MyBatis 提供的一個簡單的數(shù)據(jù)庫連接池實現(xiàn)。它將數(shù)據(jù)庫連接保存在池中,避免頻繁創(chuàng)建和銷毀連接,從而提高性能。PooledDataSource 基于傳統(tǒng)的對象池思想設(shè)計,包含了最基本的連接池功能。

1.1 PooledDataSource 的基本工作原理

  • 連接創(chuàng)建和回收:當應(yīng)用程序請求數(shù)據(jù)庫連接時,PooledDataSource 會從池中取出一個可用的連接。如果池中沒有可用的連接且未達到最大連接數(shù),則創(chuàng)建一個新連接;否則,應(yīng)用程序需要等待,直到有連接被歸還到池中。

  • 連接復(fù)用:當應(yīng)用程序使用完連接后,連接并不會關(guān)閉,而是被歸還到池中,供后續(xù)請求復(fù)用。

  • 連接有效性檢測PooledDataSource 會檢測連接是否有效,如果發(fā)現(xiàn)連接失效(如網(wǎng)絡(luò)異常、數(shù)據(jù)庫重啟等導(dǎo)致的連接中斷),會銷毀該連接,并在下次請求時創(chuàng)建一個新連接。

1.2 PooledDataSource 的配置參數(shù)

你可以在 MyBatis 的配置文件中配置 PooledDataSource。以下是常用的配置參數(shù):

  • driver:JDBC 驅(qū)動類名稱。

  • url:數(shù)據(jù)庫連接 URL。

  • username:數(shù)據(jù)庫用戶名。

  • password:數(shù)據(jù)庫密碼。

  • poolMaximumActiveConnections:池中可同時使用的最大連接數(shù),默認值是 10。

  • poolMaximumIdleConnections:池中最大空閑連接數(shù),默認值是 5。

  • poolMaximumCheckoutTime:連接被取出后最長可以使用的時間,超時后連接會被強制回收,默認值是 20000 毫秒(20 秒)。

  • poolTimeToWait:沒有可用連接時,線程最多等待的時間,超時則拋出異常,默認值是 20000 毫秒(20 秒)。

  • poolPingQuery:用于測試連接是否有效的 SQL 語句,默認是 "NO PING QUERY SET"。

  • poolPingEnabled:是否啟用偵測連接有效性的 ping 操作,默認值是 false。

  • poolPingConnectionsNotUsedFor:配置多少時間未使用的連接需要進行一次 ping 操作,默認值是 0 毫秒(即每次都進行 ping 檢測)。

1.3 示例配置

以下是使用 PooledDataSource 的 MyBatis 配置文件示例:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
                <property name="poolMaximumActiveConnections" value="20"/>
                <property name="poolMaximumIdleConnections" value="10"/>
                <property name="poolMaximumCheckoutTime" value="30000"/>
                <property name="poolTimeToWait" value="30000"/>
                <property name="poolPingQuery" value="SELECT 1"/>
                <property name="poolPingEnabled" value="true"/>
                <property name="poolPingConnectionsNotUsedFor" value="60000"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

在這個配置中,PooledDataSource 配置了 MySQL 數(shù)據(jù)庫連接池,最多允許 20 個連接同時活躍,10 個空閑連接,并且配置了連接有效性檢測。

1.4 使用 PooledDataSource 的局限性

雖然 PooledDataSource 可以滿足一些基本的連接池需求,但它的功能和性能相對較為簡單,可能不適合復(fù)雜的生產(chǎn)環(huán)境。以下是一些局限性:

  • 缺乏高級功能PooledDataSource 缺少許多現(xiàn)代連接池所提供的高級特性,如連接泄漏檢測、連接池監(jiān)控、異步連接回收等。

  • 性能有限PooledDataSource 在高并發(fā)環(huán)境下的性能和穩(wěn)定性可能不如專業(yè)的連接池實現(xiàn)。

  • 可擴展性差PooledDataSource 的可擴展性較差,不易定制和擴展。

2. 生產(chǎn)環(huán)境推薦使用的連接池

在生產(chǎn)環(huán)境中,建議使用性能更好、功能更強大的連接池實現(xiàn),如:

  • HikariCP:HikariCP 是目前性能最好的 JDBC 連接池之一,具有非常低的連接延遲和很高的吞吐量,并且配置簡單、功能強大。

  • Apache DBCP:DBCP 是 Apache Commons 提供的連接池實現(xiàn),功能豐富,廣泛使用于各種 Java 應(yīng)用中。

  • C3P0:C3P0 是一個成熟的連接池實現(xiàn),提供了豐富的配置選項和較好的性能表現(xiàn)。

3. 切換到第三方連接池

如果要切換到第三方連接池,MyBatis 只需要更改配置即可。以 HikariCP 為例:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="com.zaxxer.hikari.HikariDataSource">
                <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
                <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
                <property name="maximumPoolSize" value="20"/>
                <property name="minimumIdle" value="10"/>
                <property name="idleTimeout" value="600000"/>
                <property name="connectionTimeout" value="30000"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

總結(jié)

  • PooledDataSource:MyBatis 自帶的簡單連接池實現(xiàn),適合簡單場景,提供了基本的連接池管理功能。

  • 局限性PooledDataSource 在性能、功能、穩(wěn)定性方面存在一些局限性,不適合生產(chǎn)環(huán)境。

  • 推薦使用第三方連接池:在生產(chǎn)環(huán)境中,建議使用功能更強大、性能更好的連接池實現(xiàn),如 HikariCP、Apache DBCP 或 C3P0。

  • 切換連接池:MyBatis 支持通過簡單的配置切換到其他連接池,靈活性高。

到此這篇關(guān)于MyBatis 自帶連接池的具體實現(xiàn)的文章就介紹到這了,更多相關(guān)MyBatis 自帶連接池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Mybatis-Plus根據(jù)自定義注解實現(xiàn)自動加解密的示例代碼

    Mybatis-Plus根據(jù)自定義注解實現(xiàn)自動加解密的示例代碼

    我們把數(shù)據(jù)存到數(shù)據(jù)庫的時候,有些敏感字段是需要加密的,從數(shù)據(jù)庫查出來再進行解密,如果我們使用的是Mybatis框架,那就跟著一起探索下如何使用框架的攔截器功能實現(xiàn)自動加解密吧,需要的朋友可以參考下
    2024-06-06
  • 創(chuàng)建并運行一個java線程方法介紹

    創(chuàng)建并運行一個java線程方法介紹

    這篇文章主要介紹了創(chuàng)建并運行一個java線程,涉及線程代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • struts2實現(xiàn)多文件上傳

    struts2實現(xiàn)多文件上傳

    這篇文章主要為大家詳細介紹了struts2實現(xiàn)多文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 踩坑Debug啟動失敗,無報錯信息問題

    踩坑Debug啟動失敗,無報錯信息問題

    在進行項目debug時遇到了無法啟動的問題,項目一直處于正在啟動狀態(tài),但未出現(xiàn)任何報錯信息,分析原因可能是存在不合法的斷點位置,即斷點未打在方法內(nèi)部,解決方法是檢查所有斷點信息,并移除非法斷點,之后項目能夠正常啟動
    2023-02-02
  • JAVA驗證碼工具實例代碼

    JAVA驗證碼工具實例代碼

    這篇文章主要介紹了JAVA驗證碼工具實例代碼,需要的朋友可以參考下
    2018-03-03
  • 淺析如何高效格式化輸出JSON字符串

    淺析如何高效格式化輸出JSON字符串

    JSON(JavaScript?Object?Notation)作為一種輕量級的數(shù)據(jù)交換格式,已經(jīng)成為了各種編程語言間傳遞數(shù)據(jù)的標準,下面我們就來聊聊如何高效格式化輸出JSON字符串吧
    2025-01-01
  • SpringBoot環(huán)境搭建及第一個程序運行(小白教程)

    SpringBoot環(huán)境搭建及第一個程序運行(小白教程)

    這篇文章主要介紹了SpringBoot環(huán)境搭建及第一個程序運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java中Properties類的操作實例詳解

    Java中Properties類的操作實例詳解

    這篇文章主要介紹了Java中Properties類的操作實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 在Maven下代理服務(wù)器設(shè)定的方式

    在Maven下代理服務(wù)器設(shè)定的方式

    今天小編就為大家分享一篇關(guān)于在Maven下代理服務(wù)器設(shè)定的方式,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java利用TCP實現(xiàn)服務(wù)端向客戶端消息群發(fā)的示例代碼

    Java利用TCP實現(xiàn)服務(wù)端向客戶端消息群發(fā)的示例代碼

    這篇文章主要為大家詳細介紹了Java如何利用TCP協(xié)議實現(xiàn)服務(wù)端向客戶端消息群發(fā)功能,文中的示例代碼講解詳細,需要的可以參考下,希望對你有所幫助
    2022-08-08

最新評論