c3p0经过set方法进行配置java
private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); /** * 配置DataSource */ public static void configDataSource(){ try { dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/zhanghanlun"); dataSource.setUser("zhanghanlun"); dataSource.setPassword("123456"); dataSource.setInitialPoolSize(3); dataSource.setMaxPoolSize(10); dataSource.setMinPoolSize(3); dataSource.setAcquireIncrement(3); } catch (PropertyVetoException e) { e.printStackTrace(); } } /** * 获取Connection链接 * @return */ public static Connection getConnection(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; }
c3p0经过c3p0-config.xml文件进行配置
关于经过配置文件进行配置的话,
这边须要把xml文件方法同src文件夹下,c3p0会扫描文件进行相关的配置。
在Maven依赖中要加入c3p0和mysql-connector-java依赖,版本号必定要写。
废话很少说,下面是c3p0-config.xml文件的代码
mysql
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 默认配置,若是没有指定则使用这个配置 --> <default-config> <property name="user">zhanghanlun</property> <property name="password">123456</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/zhanghanlun</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="initialPoolSize">3</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">2</property> <property name="maxStatements">200</property> </default-config> <!-- 命名的配置,能够经过方法调用实现 --> <named-config name="test"> <property name="user">zhanghanlun</property> <property name="password">123456</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/zhanghanlun</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 若是池中数据链接不够时一次增加多少个 --> <property name="acquireIncrement">5</property> <!-- 初始化数据库链接池时链接的数量 --> <property name="initialPoolSize">20</property> <!-- 数据库链接池中的最大的数据库链接数 --> <property name="maxPoolSize">25</property> <!-- 数据库链接池中的最小的数据库链接数 --> <property name="minPoolSize">5</property> </named-config> </c3p0-config>
java代码对应以下:
sql
//加载名字为“test”的配置文件 private static ComboPooledDataSource dataSource = new ComboPooledDataSource("test"); /** * 获取Connection链接 * @return */ public static Connection getConnection(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; }
是否是代码简洁了不少,因此在咱们一般使用配置文件来建立数据库的链接池。
c3p0经常使用配置参数介绍
在前面的c3p0的相关配置中,咱们看到了c3p0的配置参数,这里咱们介绍几个经常使用的c3p0的配置参数
最基础的参数配置:
driverClass : 数据库驱动(好比mysql,或者oracle数据库的驱动)
jdbcUrl: jdbc数据库链接地址(例如jdbc:mysql://localhost:3306/zhanghanlun)
user:数据库用户名
password:和数据库用户名对应的数据库密码
## 基础的参数配置
参数 默认值 解释
initialPoolSize 3 链接池初始化时建立的链接数(介于maxPoolSize和minPoolSize之间)
maxPoolSize 15 链接池中拥有的最大链接数,若是得到新链接时会使链接总数超过这个值则不会再获取新链接,而是等待其余链接释放,因此这个值有可能会设计地很大
minPoolSize 3 链接池保持的最小链接数,后面的maxIdleTimeExcessConnections跟这个配合使用来减轻链接池的负载
acquireIncrement 3 链接池在无空闲链接可用时一次性建立的新数据库链接数
管理池大小和链接时间的配置
参数 默认值 解释
maxIdleTime 0 链接的最大空闲时间,若是超过这个时间,某个数据库链接尚未被使用,则会断开掉这个链接若是为0,则永远不会断开链接
maxConnectorAge 0 链接的最大绝对年龄,单位是秒,0表示绝对年龄无限大
maxIdleTimeExcessConnection 0 单位秒,为了减轻链接池的负载,当链接池通过数据访问高峰建立了不少链接,可是后面链接池不须要维护这么多链接,必须小于maxIdleTime.配置不为0,则将链接池的数量保持到minPoolSize
配置链接测试
参数 默认值 解释
automaticTestTable null 若是不为null,c3p0将生成指定名称的空表,使用该表来测试链接
connectionTesterClassName com.mchange.v2.c3p0.impl.DefaultConnectionTester -经过实现ConnectionTester或QueryConnectionTester的类来测试链接。类名需制定全路径。
idleConnectionTestPeriod 0 每一个几秒检查全部链接池中的空闲链接
preferredTestQuery null 定义全部链接测试都执行的测试语句。在使用链接测试的状况下这个一显著提升测试速度。注意: 测试的表必须在初始数据源的时候就存在
testConnectionOnCheckin false 若是设为true那么在取得链接的同时将校验链接的有效性
testConnectionOnCheckout false 若是为true,在链接释放的同事将校验链接的有效性。
在这几个参数中,idleConnectionTestPeriod、testConnectionOnCheckout和testConnectuonOnCheckin控制何时链接将被校验检测。automaticTestTable、connectionTesterClassName和perferedTestQuery控制链接将怎么样被检测。
配置语句池
参数 默认值 解释
maxStatements 0 JDBC的标准参数,用以控制数据源内加载d的PreparedStatements数量
maxStatementsPerConnection 0 maxStatementsPerConnection定义了链接池内单个链接所拥有的最大缓存statements数
statementCacheNumDeferredCloseThreads 0 若是大于零,则语句池将延迟物理close()缓存语句直到其父链接未被任何客户端使用,或者在其内部(例如在测试中)由池自己使用。
配置数据库的中断恢复
参数 默认值 解释
acquireRetryAttempts 30 定义在从数据库获取新链接失败后重复尝试的次数
acquireRetryDelay 1000 两次链接间隔时间,单位毫秒
breakAfterAcquireFailure false 获取链接失败将会引发全部等待链接池来获取链接的线程抛出异常。可是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取链接。若是设为true,那么在尝试 获取链接失败后该数据源将申明已断开并永久关闭
配置未解决的事务处理
参数 默认值 解释
autoCommitOnClose false 链接关闭时默认将全部未提交的操做回滚。若是为true,则未提交设置为待提交而不是回滚。
forceIgnoreUnresolvedTransactions false 官方文档建议这个不要设置为true
其余数据源配置
参数 默认值 解释
checkoutTimeout 0 当链接池用完时客户端调用getConnection()后等待获取新链接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。
factoryClassLocation 0 指定c3p0 libraries的路径,若是(一般都是这样)在本地便可得到那么无需设置,默认null便可
numHelperThreads 3 c3p0是异步操做的,缓慢的JDBC操做经过帮助进程完成。扩展这些操做能够有效的提高性能经过多线程实现多个操做同时被执行
数据库