c3p0 數據池入門使用教程

来源:https://www.cnblogs.com/houbbBlogs/p/18074465
-Advertisement-
Play Games

dbcp 系列 從零開始手寫 mybatis (三)jdbc pool 如何從零手寫實現資料庫連接池 dbcp? 萬字長文深入淺出資料庫連接池 HikariCP/Commons DBCP/Tomcat/c3p0/druid 對比 Database Connection Pool 資料庫連接池概覽 c ...


dbcp 系列

從零開始手寫 mybatis (三)jdbc pool 如何從零手寫實現資料庫連接池 dbcp?

萬字長文深入淺出資料庫連接池 HikariCP/Commons DBCP/Tomcat/c3p0/druid 對比

Database Connection Pool 資料庫連接池概覽

c3p0 數據池入門使用教程

alibaba druid 入門介紹

資料庫連接池 HikariCP 性能為什麼這麼快?

Apache Tomcat DBCP(Database Connection Pool) 資料庫連接池-01-入門介紹

vibur-dbcp 併發、快速且功能完備的 JDBC 連接池,提供先進的性能監控功能-01-入門介紹

c3p0 是什麼?

c3p0是一個易於使用的庫,通過使用jdbc3規範和jdbc2的可選擴展定義的功能來擴展傳統JDBC驅動程式,從而使其“企業就緒”。

從0.9.5版開始,c3p0完全支持jdbc4規範。

特別是c3p0提供了一些有用的服務:

一個類,它使傳統的基於DriverManager的JDBC驅動程式適應最新的javax.sql.DataSource方案,以獲取資料庫連接。

DataSources後面的Connection和PreparedStatement的透明池可以“包裝”傳統驅動程式或任意非池化DataSources。

該庫儘力使細節正確:

c3p0數據源既可引用也可序列化,因此適合綁定到各種基於JNDI的命名服務。

檢入池中的Connections和Statements時,會仔細清理Statement和ResultSet,以防止客戶端使用僅清理其Connections的惰性但常見的資源管理策略時資源耗盡。

該庫採用JDBC 2和3規範定義的方法(即使這些與庫作者的首選項衝突)。

數據源以JavaBean樣式編寫,提供了所有必需和大多數可選屬性(以及一些非標準屬性)以及無參數構造函數。

實現了所有JDBC定義的內部介面(ConnectionPoolDataSource,PooledConnection,生成ConnectionEvent的Connection等)。

您可以將c3p0類與相容的第三方實現混合使用(儘管並非所有c3p0功能都可以與ConnectionPoolDataSource的外部實現一起使用)。

c3p0希望提供的數據源實現不適合大批量“ J2EE企業應用程式”使用。請提供反饋,錯誤修複等!

入門例子

maven 導入

<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>

入門代碼

通過代碼顯式指定配置:

ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8");
source.setUser("root");
source.setPassword("123456");

//獲取鏈接
Connection connection = source.getConnection();
System.out.println(connection.getCatalog());
  • 日誌輸出
七月 17, 2020 4:58:21 下午 com.mchange.v2.log.MLog 
信息: MLog clients using java 1.4+ standard logging.
七月 17, 2020 4:58:22 下午 com.mchange.v2.c3p0.C3P0Registry 
信息: Initializing c3p0-0.9.5.5 [built 11-December-2019 22:18:33 -0800; debug? true; trace: 10]
七月 17, 2020 4:58:22 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 
信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1bqqx35abpix6b312lrdzj|7bfcd12c, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1bqqx35abpix6b312lrdzj|7bfcd12c, idleConnectionTestPeriod -> 0, initialPoolSize -> 2, jdbcUrl -> jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 30, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 2, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
test

通過配置文件

配置

  • c3p0-config.xml

將該配置文件,置於 resources 文件夾下。

<c3p0-config>
    <!-- 預設配置,如果沒有指定則使用這個配置 -->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">
            <![CDATA[jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8]]>
        </property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!-- 初始化池大小 -->
        <property name="initialPoolSize">2</property>
        <!-- 最大空閑時間 -->
        <property name="maxIdleTime">30</property>
        <!-- 最多有多少個連接 -->
        <property name="maxPoolSize">10</property>
        <!-- 最少幾個連接 -->
        <property name="minPoolSize">2</property>
        <!-- 每次最多可以執行多少個批處理語句 -->
        <property name="maxStatements">50</property>
    </default-config>
</c3p0-config>

實現

ComboPooledDataSource source = new ComboPooledDataSource();

Connection connection = source.getConnection();
System.out.println(connection.getCatalog());

日誌

七月 17, 2020 5:00:41 下午 com.mchange.v2.log.MLog 
信息: MLog clients using java 1.4+ standard logging.
七月 17, 2020 5:00:41 下午 com.mchange.v2.c3p0.C3P0Registry 
信息: Initializing c3p0-0.9.5.5 [built 11-December-2019 22:18:33 -0800; debug? true; trace: 10]
七月 17, 2020 5:00:42 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource 
信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> 1bqqx35abpj05mbhotd60|27082746, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, forceUseNamedDriverClass -> false, identityToken -> 1bqqx35abpj05mbhotd60|27082746, idleConnectionTestPeriod -> 0, initialPoolSize -> 2, jdbcUrl -> jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 30, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 2, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
test

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • “將抽象和實現解耦,讓它們可以獨立變化。” 橋接模式通過將一個類的抽象部分與實現部分分離開來,使它們可以獨立地進行擴展和修改。 ...
  • 我們都知道,我們寫的Java程式需要先經過編譯,生成了.class文件(位元組碼文件)。然而,電腦並不能直接解釋.class文件裡面的內容,這時候就需要一個能載入、解釋.class文件並且能按.class文件里的內容進行處理的一個東西--JVM。 JVM,就是Java虛擬機。它是一種規範,有針對不同 ...
  • 前言 池化思想在實際開發中有很多應用,指的是針對一些創建成本高,創建頻繁的對象,用完不棄,將其緩存在對象池子里,下次使用時優先從池子里獲取,如果獲取到則可以直接使用,以此降低創建對象的開銷。 我們最熟悉的資料庫連接池就是一種池化思想的應用,資料庫操作是非常頻繁的,資料庫連接的創建、銷毀開銷很大,每次 ...
  • 本文介紹基於R語言中的raster包,讀取單張或批量讀取多張柵格圖像,並對柵格圖像數據加以基本處理的方法。 1 包的安裝與導入 首先,我們需要配置好對應的R語言包;前面也提到,我們這裡選擇基於raster包來實現柵格圖像數據的讀取與處理工作。首先,如果有需要的話,我們可以先到raster包在R語言的 ...
  • Java的序列化和反序列化機制 問題導入: 在閱讀ArrayList源碼的時候,註意到,其內部的成員變數動態數組elementData被Java中的關鍵字transient修飾 transient關鍵字意味著Java在序列化時會跳過該欄位(不序列化該欄位) 而Java在預設情況下會序列化類(實現了J ...
  • 本文的重點在於引導讀者如何初步掌握爬蟲技術。初步掌握爬蟲技術並不難,但是在實際操作中可能會遇到一些困難,比如一些網站不允許直接訪問,需要登錄或者進行各種人機驗證等。因此,最好先從爬取一些新聞資訊類的網站開始,因為這樣相對容易。涉及用戶支付等敏感信息的網站就不那麼容易獲取了。因此,在入門階段,建議不要... ...
  • 本文分享自華為雲社區《Bokeh圖形魔法:掌握繪圖基礎與高級技巧,定製炫目可視化》,作者: 檸檬味擁抱。 Bokeh是一個用於創建互動式可視化圖形的強大Python庫。它不僅易於使用,而且功能強大,適用於各種數據可視化需求。本文將介紹Bokeh庫的繪圖可視化基礎入門,重點說明常用的參數,並通過實例演 ...
  • 在上篇文章中,我們介紹了Future相關的用法,使用它可以獲取非同步任務執行的返回值。我們再次回顧一下Future相關的用法。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...