- driverClass=com.mysql.jdbc.Driver
- jdbcjdbcUrl = jdbc:mysql://localhost:3306/test
- user = root
- password = root123
- #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
- c3p0.acquireIncrement=3
- #初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3
- c3p0.initialPoolSize=3
- #连接池中保留的最小连接数
- c3p0.minPoolSize=10
- #连接池中保留的最大连接数。Default: 15
- c3p0.maxPoolSize=15
- #最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
- c3p0.maxIdleTime=30
- #每30秒检查所有连接池中的空闲连接。Default: 0
- c3p0.idleConnectionTestPeriod=30
- #当连接池用完时客户端调用getConnection()后等待获取新连接的时间,
- #超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。Default: 0
- c3p0.checkoutTimeout=0
- #每次连接验证连接是否可用
- c3p0.validate=true
- #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
- acquireIncrement = 3
- #定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
- acquireRetryAttempts = 30
- #两次连接中间隔时间,单位毫秒。Default: 1000 -->
- acquireRetryDelay = 1000
- #如果设为true那么在取得连接的同时将校验连接的有效性。Default: false
- testConnectionOnCheckin = true
- #c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么
- #属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,
- #它将只供c3p0测试 使用。Default: null-->
- automaticTestTable = c3p0TestTable
JAVA代码1:读取资源文件
- package com.lpc.c3po;
- import java.util.ResourceBundle;
- /**
- * 读取配置文件
- * @author Administrator
- *
- */
- public class C3P0SystemConfig {
- static String configFile = "kkx/jdbc";//根据具体配置文件名称配置
- public static String getConfigInfomation(String itemIndex) {
- try {
- ResourceBundle resource = ResourceBundle.getBundle(configFile);
- return resource.getString(itemIndex);
- } catch (Exception e) {
- return"";
- }
- }
- }
JAVA代码2:数据库连接
- package com.lpc.c3po;
- import java.sql.Connection;
- import java.sql.SQLException;
- import com.mchange.v2.c3p0.ComboPooledDataSource;
- /**
- * C3PO 获得连接
- * @author Administrator
- *
- */
- public class C3P0DBConnectionManager {
- private static ComboPooledDataSource cpds = null;
- /**
- * 初始化
- */
- public static void init() {
- // 建立数据库连接池
- String DRIVER_NAME = C3P0SystemConfig
- .getConfigInfomation("jdbc.driverClassName"); // 驱动器
- String DATABASE_URL = C3P0SystemConfig.getConfigInfomation("jdbc.url"); // 数据库连接url
- String DATABASE_USER = C3P0SystemConfig
- .getConfigInfomation("jdbc.username"); // 数据库用户名
- String DATABASE_PASSWORD = C3P0SystemConfig
- .getConfigInfomation("jdbc.password"); // 数据库密码
- int Min_PoolSize = 5;
- int Max_PoolSize = 50;
- int Acquire_Increment = 5;
- int Initial_PoolSize = 10;
- // 每隔3000s测试连接是否可以正常使用
- int Idle_Test_Period = 3000;
- // 每次连接验证连接是否可用
- String Validate = C3P0SystemConfig.getConfigInfomation("c3p0.validate");
- if (Validate.equals("")) {
- Validate = "false";
- }
- // 最小连接数
- try {
- Min_PoolSize = Integer.parseInt(C3P0SystemConfig.getConfigInfomation("c3p0.minPoolSize"));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- // 增量条数
- try {
- Acquire_Increment = Integer.parseInt(C3P0SystemConfig
- .getConfigInfomation("c3p0.acquireIncrement"));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- // 最大连接数
- try {
- Max_PoolSize = Integer.parseInt(C3P0SystemConfig
- .getConfigInfomation("c3p0.maxPoolSize"));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- // 初始化连接数
- try {
- Initial_PoolSize = Integer.parseInt(C3P0SystemConfig
- .getConfigInfomation("c3p0.initialPoolSize"));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- // 每隔Idle_Test_Period s测试连接是否可以正常使用
- try {
- Idle_Test_Period = Integer.parseInt(C3P0SystemConfig
- .getConfigInfomation("c3p0.idleConnectionTestPeriod"));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- try {
- cpds = new ComboPooledDataSource();
- cpds.setDriverClass(DRIVER_NAME); // 驱动器
- cpds.setJdbcUrl(DATABASE_URL); // 数据库url
- cpds.setUser(DATABASE_USER); // 用户名
- cpds.setPassword(DATABASE_PASSWORD); // 密码
- cpds.setInitialPoolSize(Initial_PoolSize); // 初始化连接池大小
- cpds.setMinPoolSize(Min_PoolSize); // 最少连接数
- cpds.setMaxPoolSize(Max_PoolSize); // 最大连接数
- cpds.setAcquireIncrement(Acquire_Increment); // 连接数的增量
- cpds.setIdleConnectionTestPeriod(Idle_Test_Period); // 测连接有效的时间间隔
- cpds.setTestConnectionOnCheckout(Boolean.getBoolean(Validate)); // 每次连接验证连接是否可用
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- /**
- * 取得链接
- *
- * @return
- */
- public static Connection getConnection() {
- Connection connection = null;
- try {// 保证只进行一次初始化
- if (cpds == null) {
- init();
- }
- // 取得connection
- connection = cpds.getConnection();
- } catch (SQLException ex) {
- ex.printStackTrace();
- }
- return connection;
- }
- /**
- * 释放连接
- */
- public static void release() {
- try {
- if (cpds != null) {
- cpds.close();
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- }
注:
解决MYSQL 8小时问题
最近的一个项目在Hibernate使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常:
- ** BEGIN NESTED EXCEPTION **
- com.mysql.jdbc.CommunicationsException
- MESSAGE: Communications link failure due to underlying exception:
- ** BEGIN NESTED EXCEPTION **
- java.net.SocketException
- MESSAGE: Broken pipe
- STACKTRACE:
- java.net.SocketException: Broken pipe
- at java.net.SocketOutputStream.socketWrite0(Native Method)
- ......
- ** END NESTED EXCEPTION **
解决方法:
- C3P0增加以下配置信息:
- //获取connnection时测试是否有效
- testConnectionOnCheckin = true
- //自动测试的table名称
- automaticTestTable=C3P0TestTable
- idleConnectionTestPeriod = 18000
- maxIdleTime = 25000
- testConnectionOnCheckout = true
相关推荐
C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种管理数据库连接的方式,使得在多用户并发访问时能够有效地利用和管理数据库资源,提高系统的性能和稳定性。C3P0的主要功能是为应用...
- `c3p0.jar`:包含了C3P0的核心连接池功能。 - `mchange-commons-java.jar`:Mchange Commons Java库,提供了一些通用工具类和异常处理。 - `mysql-connector-java.jar`(或其他数据库驱动JAR):根据你的数据库...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。标题中的"c3p0-0.9.5.1"指的是C3P0的一个特定版本,即0.9.5.1版。这个版本可能包含了对早期版本的修复、性能优化或新功能...
C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`hibernate-c3p0-4.0.0.Final[1].jar`以及`mchange-commons-java-0.2.3.4.jar`。 1. **c3p0-0.9.2.1.jar**: 这是C3P0的主要库文件,包含了C3P0的...
C3P0连接池是Java开发中常用的数据库连接池组件,它由M-Fenyes创建并维护,旨在提供一个高效、灵活且稳定的数据库连接管理工具。数据库连接池在多线程应用中扮演着重要角色,它能有效地管理和复用数据库连接,避免...
C3P0是一个广泛使用的开源Java JDBC连接池,它的全称是Comprehensive Connection Pooling Package。这个库的主要目的是提供数据库连接的高效管理,以优化数据库应用程序的性能和资源利用。C3P0的设计目标是为了满足...
标题:"c3p0用法步骤" 描述:"这是我学习过程中积累的学习笔记,希望对大家有用" 标签:"c3p0" 知识点详述: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC连接池的特性,如:自动重连、自动...
C3p0c3p0-0.9.5.5三个jar包使用,匹配mysql8.0等信息,包含mchange-commons-java-0.2.19.jar、c3p0-oracle-thin-extras-0.9.5.5.jar、c3p0-0.9.5.5.jar
整合SpringMVC与C3P0能有效地优化数据库操作,提高应用的性能和稳定性。 首先,我们需要了解C3P0的基本概念。C3P0是一个完全兼容JDBC3规范的连接池实现,提供了连接测试、空闲连接检测、自动关闭无效连接等功能。其...
C3P0是一款开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,C3P0可以帮助我们更有效地管理和使用数据库连接,避免频繁创建和关闭连接导致的性能损失。下面将...
C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种在JDBC数据库连接管理中的高效、稳定和扩展性良好的解决方案。C3P0的主要目标是通过提供自动的资源管理和故障恢复功能,来帮助Java...
C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...
**C3P0详解** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java的Web应用中,数据库连接的创建、分配、管理和释放是相当耗时的,而C3P0通过管理这些连接,提高了...
C3P0是一款开源的Java连接池,全称为Comming Soon Connection Pool,它是一个支持JDBC的数据库连接池组件。这个组件的主要作用是提高数据库访问的效率,通过复用已经建立的数据库连接,减少频繁创建和关闭连接所造成...
C3P0是一个开源的Java连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个压缩包文件包含了使用C3P0数据库连接池所需的关键组件和配置文件,使得数据库连接管理更加高效和稳定。 首先,`c3p0-...
**c3p0-0.9.2-pre1:数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0-0.9.2-pre1是其在2007年发布的一个版本,尽管现在有更新的版本,但这个老...
C3P0和DBUtils是两个非常重要的库,用于简化Java应用程序中的数据库操作。以下是这两个库的详细介绍: C3P0是一个开源的JDBC连接池,它的全称是Commerical-grade Connection Pooling for JDBC。C3P0-0.9.1.2.jar是...
在描述中提到的三个jar包,c3p0-0.9.1.jar、c3p0-0.9.1.2.jar和c3p0-0.9.1-pre6.jar,都是C3P0的不同版本。通常,你需要的是最新版本,以获取最新的功能和修复的bug。例如,c3p0-0.9.1.2.jar比c3p0-0.9.1.jar更新,...