iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java数据库连接池c3p0介绍
  • 913
分享到

Java数据库连接池c3p0介绍

2024-04-02 19:04:59 913人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1、配置参数1.1、基础配置1.2、连接池大小1.3、连接池大小和连接存活时间1.4、连接测试1.5、预编译池1.6、数据库中断的恢复1.7、自定义连接生命周期管理1.8、处理未

前言:

c3p0 是一个开源数据库连接池,实现了 JDBC 3 规范;本文主要介绍 c3p0 的基本使用,文中使用到的软件版本:Java 1.8.0_191、c3p0 0.9.5.5、Spring Boot 2.3.12.RELEASE。

1、配置参数

1.1、基础配置

配置

参数 默认值 描述
driverClass null 驱动类名称
jdbcUrl null jdbc 连接 url
user null 用户名
passWord null 密码

1.2、连接池大小

参数 默认值 描述
acquireIncrement 3 连接池中的连接耗尽时,一次创建的连接个数
initialPoolSize 3 初始连接池大小,介于 minPoolSize 和 maxPoolSize 之间
maxPoolSize 15 最大连接数
minPoolSize 3 最小连接数

1.3、连接池大小和连接存活时间

参数 默认值 描述
maxConnectionAge 0 连接存活的最长时间(秒),0 表示没有限制。正在使用的连接不会不受此限制。
 maxIdleTime 0  空闲连接数最大存活时间,0 表示永不过期
 maxIdleTimeExcessConnections 0  当连接数大于 minPoolSize 时,空闲连接数最大存活时间,0 表示永不过期

1.4、连接测试

参数 默认值 描述
automaticTestTable null 测试的表名;如果设置了,c3p0 将使用该表名创建一个空表,并使用其来测试连接,preferredTestQuery 参数将被忽略。
connectionTesterClassName com.mchange.v2.c3p0.impl.DefaultConnectionTester 连接测试的类名,需实现  com.mchange.v2.c3p0.ConnectionTester 或 com.mchange.v2.c3p0.QueryConnectionTester 接口。
idleConnectionTestPeriod 0 空闲连接测试的间隔(秒)。
preferredTestQuery null 连接测试的语句;如果不设置,将使用 DatabaseMetaData 的 getTables 方法来测试,这可能时比较慢的。
testConnectionOnCheckin false 连接返回连接池时,是否测试
testConnectionOnCheckout false 从连接池获取连接时,是否测试

1.5、预编译池

参数 默认值 描述
maxStatements 0 缓存总体预编译语句的最大数量
maxStatementsPerConnection 0 缓存每个连接中预编译语句的最大数量
statementCacheNumDeferredCloseThreads 0 清理 statement 缓存的线程数,如果需要设置,应设置为 1。一些数据库,特别是 oracle 会在连接使用时关闭 statement,数据库无法很好的处理这种情况,进而导致死。清理的线程会在连接

maxStatements 和 maxStatementsPerConnection 如果都为 0,将不缓存预编译语句。如果 maxStatements=0 and maxStatementsPerConnection>0maxStatementsPerConnection 起作用,不限制总的缓存数量;如果 maxStatements>0 and maxStatementsPerConnection=0maxStatements 起作用,不限单个连接的缓存数量。

1.6、数据库中断的恢复

参数 默认值 描述
acquireRetryAttempts 30 获取连接失败时的重试次数
acquireRetryDelay 1000 连接获取重试的时间间隔(毫秒)
 breakAfterAcquireFailure  false 尝试获取连接失败时,是否声明连接池断开并永久关闭

1.7、自定义连接生命周期管理

参数 默认值 描述
connectionCustomizerClassName null 连接生命周期管理的自定义类,需实现 com.mchange.v2.c3p0.ConnectionCustomizer 接口

1.8、处理未提交的事务

参数 默认值 描述
autoCommitOnClose false 连接在返回连接池时是否自动提交事务。true,提交事务;false,回滚事务
forceIgnoreUnresolvedTransactions false 连接在返回连接池时,是否强制不处理事务;强烈不推荐设置为 true。

1.9、调试

参数 默认值 描述
debugUnreturnedConnectionStackTraces false 是否记录活动连接的堆栈信息;如果设为 true,且 unreturnedConnectionTimeout>0,当连接借出时间 > unreturnedConnectionTimeout 时,就会打印连接的堆栈信息,并删除该连接。
unreturnedConnectionTimeout 0 连接未返回连接池的超时时间(秒)

这两个参数可用于帮助发现连接泄露。

1.10、避免热部署内存泄露

参数 默认值 描述
contextClassLoaderSource caller 用于生成 c3p0 线程的类加载器来源,为 caller, library 或 none。caller 表示来源于连接池的调用者;library 表示来源于 c3p0 本身;none 表示使用系统类加载器
privilegeSpawnedThreads false  生成 c3p0 线程时是否使用 c3p0 库中的 AccessControlContext;默认(false)使用连接池调用者的 AccessControlContext。

在应用热部署、取消部署时,连接池可能会阻止垃圾回收进而导致内存泄露; 这两个参数主要用于处理这种情况。

1.11、其它配置

参数 默认值 描述
checkoutTimeout 0 从连接获取连接的超时时间,0 表示永不超时
factoryClassLocation null c3p0 libraries的路径,如果在本地(通常都是这样),那么无需设置
forceSynchronousCheckins false 连接返回连接池是否同步方式
 maxAdministrativeTaskTime  0  管理任务运行的最大时间(秒),超过改时间会终端任务;0 表示管理任务永远不被打断。
 numHelperThreads  3  管理线程个数
usesTraditionalReflectiveProxies false 已过期。是否使用发射动态代理的方式来实现 Connection 及 其他 JDBC 接口。

详细说明可参考官网文档:https://www.mchange.com/projects/c3p0/#configuration

2、原始连接操作

c3p0 提供 api 来访问原始连接中的非标准接口:

  • 把连接转成 C3P0ProxyConnection
  • 然后调用 rawConnectionOperation 方法

下面是获取 postgresql  JDBC 驱动中 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);

        }

        //实际使用中一般是在应用启动时初始化数据源,应用从数据源中获取连接;并不会关闭数据源。

        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、单数据源

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

数据源配置类:


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、多数据源

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

数据源配置类:


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;

到此这篇关于 Java 数据库连接池c3p0 介绍的文章就介绍到这了,更多相关 Java 连接池c3p0 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java数据库连接池c3p0介绍

本文链接: https://www.lsjlt.com/news/158086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java数据库连接池c3p0介绍
    目录1、配置参数1.1、基础配置1.2、连接池大小1.3、连接池大小和连接存活时间1.4、连接测试1.5、预编译池1.6、数据库中断的恢复1.7、自定义连接生命周期管理1.8、处理未...
    99+
    2022-11-12
  • Java 数据库连接池DBPool 介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.1.1、引入依赖2.1.2、单数据源2.1.3、多数据源前...
    99+
    2022-11-12
  • Java数据库连接池Tomcat介绍
    目录1、配置参数1.1、基础配置1.2、系统属性1.3、一般参数1.4、增强参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、作为资源配置在 Tomcat ...
    99+
    2022-11-12
  • Java数据库连接池DBCP的介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.2.1、引入依赖2.2.2、单数据源2.2.3、多数据源D...
    99+
    2022-11-12
  • Java 数据库连接池Druid 的介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.1.1、引入依赖2.1.2、单数据源2.1.3、多数据源2...
    99+
    2022-11-12
  • 2020.05.28 数据库连接池 C3P0 Druid JDBCTemplate
    今日内容 1. 数据库连接池 2. Spring JDBC : JDBC Template 数据库连接池 1. 概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初始化好后,容器被创建,容器中会申请一些连接对象,...
    99+
    2018-09-05
    2020.05.28 数据库连接池 C3P0 Druid JDBCTemplate
  • c3p0数据库连接池配置总结
    C3P0是一个开源的数据库连接池,可以用于在Java应用程序中管理数据库连接。下面是C3P0数据库连接池的配置总结:1. 配置数据源...
    99+
    2023-10-12
    数据库
  • c3p0数据库连接池如何使用
    这期内容当中小编将会给大家带来有关c3p0数据库连接池如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、jar包引用开源项目,自然要先下载人家的jar包,我这里有...
    99+
    2022-10-18
  • 数据库连接池技术中dbcp、c3p0、jndi
    不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的。在以往的应用中,数据源一般是 Web应用服务器提供的。在Spring中,你不但可以通过JNDI获取应用服务...
    99+
    2022-10-18
  • c3p0数据库连接池如何在Java项目中使用
    今天就跟大家聊聊有关c3p0数据库连接池如何在Java项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。c3p0是什么c3p0的出现,是为了大大提高应用程序和数据库之间访问效率...
    99+
    2023-05-31
    java 数据库连接池 c3p0
  • c3p0数据库连接池如何进行配置
    这篇文章将为大家详细讲解有关c3p0数据库连接池如何进行配置,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。c3p0的配置方式分为三种,分别是setters一个个地设置各个配置项2.类路径下提...
    99+
    2023-05-31
    c3p0 数据库连接池
  • JavaJDBCAPI介绍与实现数据库连接池流程
    目录JDBC API详解DriverManagerConnection获取执行对象事务管理Statement概述代码演示ResultSet概述代码演示PreparedStatemen...
    99+
    2022-12-08
    Java JDBC API Java JDBC数据库连接池
  • C3P0属性设置和数据库连接池的获取
    在C3p0构建时,有驱动相关信息及数据库连接池相关的属性设置,及连接的获取,今天我们先来看一下,驱动相关信息及数据库连接池相关的属性设置,在连接的获取。 从下面几句开始, Java代码&...
    99+
    2022-10-18
  • 详解springboot 使用c3p0数据库连接池的方法
    使用springboot开发时,默认使用内置的tomcat数据库连接池,经常碰到这种情况:运行时间一长,数据库连接中断了。所以使用c3p0连接池吧。引入的maven依赖:<dependency> <groupId>...
    99+
    2023-05-31
    spring boot c3p0
  • Java连接数据库的步骤介绍
    第一步:数据库驱动和数据量地址基本信息。 // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL static final String JDBC_DRIV...
    99+
    2022-11-13
  • DataSource与数据库连接池简介(JDBC简介)
    目录起源为何放弃DriverManager连接池数据源实现核心架构DataSourceAPI小结应用数据库连接池示例总结DataSource是作为DriverManager的替代品而...
    99+
    2022-11-13
    数据库连接池Data Source JDBC数据库连接池Data Source
  • pythonflasksqlalchemy连接数据库流程介绍
    1、安装flask_sqlalchemy和pymysql包 pip install flask-sqlalchemy pip install pymysql 2、进行配置 使用Fla...
    99+
    2022-11-11
  • Java操作数据库——使用连接池连接数据库
    传统方式和连接池方式传统方式的步骤使用传统方式在Java中使用JDBC连接数据库,完成一次数据库的操作,一般有以下几个步骤: 加载驱动。 建立连接。 执行SQL语句。 释放连接。 传统方式的弊端每一次对数据库的操作都要建立一次连接,并且会将...
    99+
    2014-08-26
    java基础 java 连接池
  • 详解Java数据库连接池
    目录一、什么是数据库连接池二、为什么需要连接池,好处是什么?三、都有哪些连接池方案四、连接池需要关注的参数五、怎么创建连接池,show me the code5.1 pom.xml ...
    99+
    2022-11-12
  • Java数据库连接池(经典)
    转载自:http://langzixin.iteye.com/blog/808975不错的案例,收藏起来,要不时间长了就找不到了...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作