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

Java 數(shù)據(jù)庫連接池c3p0 介紹

 更新時間:2021年11月23日 10:45:47   作者:詠吟  
這篇文章主要介給大家分享了 Java 數(shù)據(jù)庫連接池c3p0 介紹,c3p0 是一個成熟的、高并發(fā)的 JDBC 連接池庫,支持緩存和 PreparedStatements 的重用。它以LGPL v.2.1或EPL v.1.0授權(quán),下面我們就一起來看看文章內(nèi)容的詳細(xì)介紹吧,需要的朋友也可以參考一下

前言:

c3p0 是一個開源的數(shù)據(jù)庫連接池,實現(xiàn)了 JDBC 3 規(guī)范;本文主要介紹 c3p0 的基本使用,文中使用到的軟件版本:Java 1.8.0_191、c3p0 0.9.5.5、Spring Boot 2.3.12.RELEASE。

1、配置參數(shù)

1.1、基礎(chǔ)配置

配置

參數(shù) 默認(rèn)值 描述
driverClass null 驅(qū)動類名稱
jdbcUrl null jdbc 連接 url
user null 用戶名
password null 密碼

1.2、連接池大小

參數(shù) 默認(rèn)值 描述
acquireIncrement 3 連接池中的連接耗盡時,一次創(chuàng)建的連接個數(shù)
initialPoolSize 3 初始連接池大小,介于?minPoolSize 和 maxPoolSize 之間
maxPoolSize 15 最大連接數(shù)
minPoolSize 3 最小連接數(shù)

1.3、連接池大小和連接存活時間

參數(shù) 默認(rèn)值 描述
maxConnectionAge 0 連接存活的最長時間(秒),0 表示沒有限制。正在使用的連接不會不受此限制。
?maxIdleTime 0 ?空閑連接數(shù)最大存活時間,0 表示永不過期
?maxIdleTimeExcessConnections 0 ?當(dāng)連接數(shù)大于?minPoolSize 時,空閑連接數(shù)最大存活時間,0 表示永不過期

1.4、連接測試

參數(shù) 默認(rèn)值 描述
automaticTestTable null 測試的表名;如果設(shè)置了,c3p0 將使用該表名創(chuàng)建一個空表,并使用其來測試連接,preferredTestQuery 參數(shù)將被忽略。
connectionTesterClassName com.mchange.v2.c3p0.impl.DefaultConnectionTester 連接測試的類名,需實現(xiàn)??com.mchange.v2.c3p0.ConnectionTester 或 com.mchange.v2.c3p0.QueryConnectionTester 接口。
idleConnectionTestPeriod 0 空閑連接測試的間隔(秒)。
preferredTestQuery null 連接測試的語句;如果不設(shè)置,將使用?DatabaseMetaData 的?getTables 方法來測試,這可能時比較慢的。
testConnectionOnCheckin false 連接返回連接池時,是否測試
testConnectionOnCheckout false 從連接池獲取連接時,是否測試

1.5、預(yù)編譯池

參數(shù) 默認(rèn)值 描述
maxStatements 0 緩存總體預(yù)編譯語句的最大數(shù)量
maxStatementsPerConnection 0 緩存每個連接中預(yù)編譯語句的最大數(shù)量
statementCacheNumDeferredCloseThreads 0 清理 statement 緩存的線程數(shù),如果需要設(shè)置,應(yīng)設(shè)置為 1。一些數(shù)據(jù)庫,特別是 oracle 會在連接使用時關(guān)閉 statement,數(shù)據(jù)庫無法很好的處理這種情況,進(jìn)而導(dǎo)致死鎖。清理的線程會在連接

maxStatements 和?maxStatementsPerConnection 如果都為 0,將不緩存預(yù)編譯語句。如果?maxStatements=0 and?maxStatementsPerConnection>0,maxStatementsPerConnection 起作用,不限制總的緩存數(shù)量;如果?maxStatements>0 and?maxStatementsPerConnection=0,maxStatements 起作用,不限單個連接的緩存數(shù)量。

1.6、數(shù)據(jù)庫中斷的恢復(fù)

參數(shù) 默認(rèn)值 描述
acquireRetryAttempts 30 獲取連接失敗時的重試次數(shù)
acquireRetryDelay 1000 連接獲取重試的時間間隔(毫秒)
?breakAfterAcquireFailure ?false 嘗試獲取連接失敗時,是否聲明連接池斷開并永久關(guān)閉

1.7、自定義連接生命周期管理

參數(shù) 默認(rèn)值 描述
connectionCustomizerClassName null 連接生命周期管理的自定義類,需實現(xiàn)?com.mchange.v2.c3p0.ConnectionCustomizer 接口

1.8、處理未提交的事務(wù)

參數(shù) 默認(rèn)值 描述
autoCommitOnClose false 連接在返回連接池時是否自動提交事務(wù)。true,提交事務(wù);false,回滾事務(wù)
forceIgnoreUnresolvedTransactions false 連接在返回連接池時,是否強制不處理事務(wù);強烈不推薦設(shè)置為 true。

1.9、調(diào)試

參數(shù) 默認(rèn)值 描述
debugUnreturnedConnectionStackTraces false 是否記錄活動連接的堆棧信息;如果設(shè)為 true,且?unreturnedConnectionTimeout>0,當(dāng)連接借出時間 >?unreturnedConnectionTimeout 時,就會打印連接的堆棧信息,并刪除該連接。
unreturnedConnectionTimeout 0 連接未返回連接池的超時時間(秒)

這兩個參數(shù)可用于幫助發(fā)現(xiàn)連接泄露。

1.10、避免熱部署內(nèi)存泄露

參數(shù) 默認(rèn)值 描述
contextClassLoaderSource caller 用于生成 c3p0 線程的類加載器來源,為 caller, library 或 none。caller 表示來源于連接池的調(diào)用者;library 表示來源于 c3p0 本身;none 表示使用系統(tǒng)類加載器
privilegeSpawnedThreads false ?生成 c3p0 線程時是否使用 c3p0 庫中的 AccessControlContext;默認(rèn)(false)使用連接池調(diào)用者的 AccessControlContext。

在應(yīng)用熱部署、取消部署時,連接池可能會阻止垃圾回收進(jìn)而導(dǎo)致內(nèi)存泄露;?這兩個參數(shù)主要用于處理這種情況。

1.11、其它配置

參數(shù) 默認(rèn)值 描述
checkoutTimeout 0 從連接獲取連接的超時時間,0 表示永不超時
factoryClassLocation null c3p0 libraries的路徑,如果在本地(通常都是這樣),那么無需設(shè)置
forceSynchronousCheckins false 連接返回連接池是否同步方式
?maxAdministrativeTaskTime ?0 ?管理任務(wù)運行的最大時間(秒),超過改時間會終端任務(wù);0 表示管理任務(wù)永遠(yuǎn)不被打斷。
?numHelperThreads ?3 ?管理線程個數(shù)
usesTraditionalReflectiveProxies false 已過期。是否使用發(fā)射動態(tài)代理的方式來實現(xiàn) Connection 及 其他 JDBC 接口。

詳細(xì)說明可參考官網(wǎng)文檔:https://www.mchange.com/projects/c3p0/#configuration

2、原始連接操作

c3p0 提供 api 來訪問原始連接中的非標(biāo)準(zhǔn)接口:

  • 把連接轉(zhuǎn)成 C3P0ProxyConnection
  • 然后調(diào)用 rawConnectionOperation 方法

下面是獲取 PostgreSQL? JDBC 驅(qū)動中 CopyManager 對象的方法:

Connection connection = (C3P0ProxyConnection) c3p0DataSource.getConnection();

C3P0ProxyConnection castConnection = (C3P0ProxyConnection) connection;

Method method = BaseConnection.class.getMethod("getCopyAPI", new Class[]{});

CopyManager copyManager = (CopyManager) castConnection.rawConnectionOperation(method, C3P0ProxyConnection.RAW_CONNECTION, new Object[]{});

3、使用

3.1、直接使用

3.1.1、引入依賴

<dependency>

    <groupId>com.mchange</groupId>

    <artifactId>c3p0</artifactId>

    <version>0.9.5.5</version>

</dependency>

3.1.2、使用例子

package com.abc.demo.general.dbpool;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.beans.PropertyVetoException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class C3p0Case {

    public static void main(String[] args) throws PropertyVetoException {

        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();

        comboPooledDataSource.setDriverClass("com.mysql.cj.jdbc.Driver");

        comboPooledDataSource.setJdbcUrl("jdbc:mysql://10.40.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8");

        comboPooledDataSource.setUser("root");

        comboPooledDataSource.setPassword("123456");

        comboPooledDataSource.setInitialPoolSize(2);

        comboPooledDataSource.setMinPoolSize(2);

        comboPooledDataSource.setMaxPoolSize(10);

        comboPooledDataSource.setPreferredTestQuery("select 1");

        comboPooledDataSource.setIdleConnectionTestPeriod(60);

        comboPooledDataSource.setTestConnectionOnCheckout(true);

        comboPooledDataSource.setCheckoutTimeout(1000 * 30);

        Connection connection = null;

        Statement st = null;

        ResultSet rs  = null;

        try {

            connection = comboPooledDataSource.getConnection();

            st = connection.createStatement();

            rs = st.executeQuery("select version()");

            if (rs.next()) {

                System.out.println(rs.getString(1));

            }

        } catch (SQLException e) {

            e.printStackTrace();

        } finally {

            close(connection);

        }

        //實際使用中一般是在應(yīng)用啟動時初始化數(shù)據(jù)源,應(yīng)用從數(shù)據(jù)源中獲取連接;并不會關(guān)閉數(shù)據(jù)源。

        comboPooledDataSource.close();

    }

    private static void close(Connection connection) {

        if (connection != null) {

            try {

                connection.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    }

}

3.2、在 SpringBoot 中使用

3.1.1、引入依賴

<parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>2.3.12.RELEASE</version>

    <relativePath />

</parent>

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-jdbc</artifactId>

    </dependency>

    <dependency>

        <groupId>com.mchange</groupId>

        <artifactId>c3p0</artifactId>

        <version>0.9.5.5</version>

    </dependency>

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

    </dependency>

</dependencies>

3.1.2、單數(shù)據(jù)源

application.yml 配置:

spring:

  datasource:

    c3p0:

      driver-class: com.mysql.cj.jdbc.Driver

      jdbc-url: jdbc:mysql://10.40.9.11:3306/myDb?useUnicode=true&characterEncoding=UTF-8

      user: root

      password: 123456

      initial-pool-size: 2

      min-pool-size: 2

      max-pool-size: 10

      preferred-test-query: select 1

      idle-connection-test-period: 60

      test-connection-on-checkout: true

      checkout-timeout: 30000

數(shù)據(jù)源配置類:

package com.abc.demo.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.boot.jdbc.DataSourceBuilder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration

public class DataSourceConfig {

    @Bean("dataSource")

    @ConfigurationProperties(prefix = "spring.datasource.c3p0")

    public DataSource dataSource1() {

        return DataSourceBuilder.create().type(ComboPooledDataSource.class).build();

    }

}

使用:

@Autowired

private DataSource dataSource;

3.1.3、多數(shù)據(jù)源

application.yml 配置:

spring:

  datasource:

    c3p0:

      db1:

        driver-class: com.mysql.cj.jdbc.Driver

        jdbc-url: jdbc:mysql://10.40.9.11:3306/myDb?useUnicode=true&characterEncoding=UTF-8

        user: root

        password: InsYR0ot187!

        initial-pool-size: 2

        min-pool-size: 2

        max-pool-size: 10

        preferred-test-query: select 1

        idle-connection-test-period: 60

        test-connection-on-checkout: true

        checkout-timeout: 30000

      db2:

        driver-class: com.mysql.cj.jdbc.Driver

        jdbc-url: jdbc:mysql://10.40.9.12:3306/myDb?useUnicode=true&characterEncoding=UTF-8

        user: root

        password: InsYR0ot187!

        initial-pool-size: 2

        min-pool-size: 2

        max-pool-size: 10

        preferred-test-query: select 1

        idle-connection-test-period: 60

        test-connection-on-checkout: true

        checkout-timeout: 30000

數(shù)據(jù)源配置類:

package com.abc.demo.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.boot.jdbc.DataSourceBuilder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration

public class DataSourceConfig {

    @Bean("dataSource1")

    @ConfigurationProperties(prefix = "spring.datasource.c3p0.db1")

    public DataSource dataSource1() {

        return DataSourceBuilder.create().type(ComboPooledDataSource.class).build();

    }

    @Bean("dataSource2")

    @ConfigurationProperties(prefix = "spring.datasource.c3p0.db2")

    public DataSource dataSource2() {

        return DataSourceBuilder.create().type(ComboPooledDataSource.class).build();

    }

}

使用:

@Autowired

@Qualifier("dataSource1")

private DataSource dataSource1;



@Autowired

@Qualifier("dataSource2")

private DataSource dataSource2;

到此這篇關(guān)于 Java 數(shù)據(jù)庫連接池c3p0 介紹的文章就介紹到這了,更多相關(guān) Java 連接池c3p0 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java變量的初始化順序詳解

    淺談Java變量的初始化順序詳解

    本篇文章是對Java變量的初始化順序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決

    SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決

    這篇文章主要介紹了SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解

    Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解

    這篇文章主要介紹了Spring Cloud Eureka 注冊與發(fā)現(xiàn)操作步驟詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 如何使用JJWT及JWT講解和工具類

    如何使用JJWT及JWT講解和工具類

    關(guān)于JWT的文章網(wǎng)上已經(jīng)多如牛毛了,但是相信很多同學(xué)學(xué)的還是云里霧里,所以在我學(xué)習(xí)JWT之后盡量用最簡潔的描述寫下這篇文章用于日后復(fù)習(xí),與此同時也希望可以幫助同學(xué)們共同進(jìn)步
    2021-09-09
  • slf4j使用log4j的配置參數(shù)方式

    slf4j使用log4j的配置參數(shù)方式

    這篇文章主要介紹了slf4j使用log4j的配置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java使用JMeter進(jìn)行高并發(fā)測試

    Java使用JMeter進(jìn)行高并發(fā)測試

    軟件的壓力測試是一種保證軟件質(zhì)量的行為,本文主要介紹了Java使用JMeter進(jìn)行高并發(fā)測試,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具

    Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具

    這篇文章主要為大家詳細(xì)介紹了自己編寫的Java數(shù)組操作工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java中動態(tài)地改變數(shù)組長度及數(shù)組轉(zhuǎn)Map的代碼實例分享

    Java中動態(tài)地改變數(shù)組長度及數(shù)組轉(zhuǎn)Map的代碼實例分享

    這篇文章主要介紹了Java中動態(tài)地改變數(shù)組長度及數(shù)組轉(zhuǎn)map的代碼分享,其中轉(zhuǎn)Map利用到了java.util.Map接口,需要的朋友可以參考下
    2016-03-03
  • SpringBoot整合高德地圖天氣查詢的全過程

    SpringBoot整合高德地圖天氣查詢的全過程

    這篇文章主要給大家介紹了關(guān)于SpringBoot整合高德地圖天氣查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-12-12
  • Java設(shè)計模式之java狀態(tài)模式詳解

    Java設(shè)計模式之java狀態(tài)模式詳解

    這篇文章主要介紹了Java設(shè)計模式之狀態(tài)模式定義與用法,結(jié)合具體實例形式詳細(xì)分析了Java狀態(tài)模式的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下
    2021-09-09

最新評論

玛纳斯县| 巴彦淖尔市| 临西县| 开阳县| 治多县| 濮阳市| 石首市| 佛山市| 苗栗市| 贵南县| 富源县| 诸暨市| 万年县| 兴安盟| 门头沟区| 云林县| 临邑县| 锦州市| 武陟县| 岑巩县| 杭锦旗| 清丰县| 南漳县| 翼城县| 蚌埠市| 彭州市| 兰坪| 雅安市| 河北省| 南和县| 稷山县| 江油市| 临夏县| 房产| 吴江市| 濮阳市| 全南县| 黎川县| 阿荣旗| 马公市| 新化县|