DBCP + C3P0 连接池
DBCP 配置参数如下:
参数 |
默认值 |
可选值 |
格式 |
说明 |
username |
用户名 |
|||
password |
密码 |
|||
url |
数据库连接url |
|||
driverClassName |
驱动类 |
|||
connectionProperties |
[propertyName=property;]* |
当建立新连接时被发送给JDBC驱动的连接参数 |
||
defaultAutoCommit |
true |
true、false |
||
defaultReadOnly |
driver default |
driver default |
默认只读状态,不指定则是驱动的默认值 |
|
defaultTransactionIsolation |
driver default |
ONE |
实物的隔离级别 |
|
defaultCatalog |
默认的database的名称,多数驱动已经在url中指定 |
|||
initialSize |
非负整数 |
初始化连接数 |
||
maxActive |
整数 |
最大活跃连接数,负数则无限制 |
||
maxIdle |
整数 |
最大空闲连接数,超出会释放连接 |
||
minIdle |
整数 |
最小空闲数 |
||
maxWait |
无限 |
整数 |
最大等待时间:当没有可用连接时,连接池等待连接 |
|
validationQuery |
检查连接是否可用的查询语句 |
|||
testOnCreate |
false |
true、false |
连接被create时是否校验可用, |
|
testOnBorrow |
true |
true、false |
连接被get时是否校验可用, |
|
testOnReturn |
false |
连接被归还到连接池中时是否校验可用 |
||
testWhileIdle |
false |
连接被空闲连接回收器检测回收时否校验可用 |
||
timeBetweenEvictionRunsMillis |
-1 |
空闲连接回收器运行周期,毫秒,-1表示不运行 |
||
numTestsPerEvictionRun |
在每次空闲连接回收器线程(如果有) |
|||
minEvictableIdleTimeMillis |
1000 * 60 * 30 |
最小空闲时间,毫秒 |
||
SADpoolPreparedStatements |
false |
是否启池的prepared statement 池功能 |
||
maxOpenPreparedStatements |
无限制 |
statement池能够同时分配的打开的 |
||
accessToUnderlyingConnectionAllowed |
false |
true、false |
是否运行获取底层的Connection(驱动提供的连接) |
|
removeAbandoned |
||||
removeAbandonedTimeout |
||||
logAbandoned |
使用DBCP连接池的两种方法:
方法一:
1 String sql = "com.mysql.jdbc.Driver";
2 String url = "jdbc:mysql//127.0.0.1:3306/mydata";
3 String user = "root";
4 String password = "root";
5 DasicDataSource source = new DasicDataSource();
6 source.setDriverClassName(sql);
7 source.setUrl(url);
8 source.setUserName(user);
9 source.setPassword(password);
10 Connection conn = source.getConnection();
11 PreparedStatement stmt = conn.PreparedStatement("Selet *from student_data where name= ?");
12 stmt.setString("xiaojiang");
13 ResultSet rs = stmt.executeQuery();
14 <!-下面输出省略不写->
方法二:
把所有参数放入配置文件,如:config.properties
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql//127.0.0.1:3306/mydata
username = root
password = root
initialSize = 5
连接代码如下:
//获取配置文件
Properties prop = new Properties();
prop.load(new FileReader("config.properties"));
DasicDataSourceFactory facutry = new DasicDataSourceFactory();
DataSource source = facutry.createDataSource(prop);
Connection conn = source.getConnection();
PreparedStatement stmt = conn.PreparedStatement("Selet *from student_data where name= ?");
stmt.setString("xiaojiang");
ResultSet rs = stmt.executeQuery();
<!-下面输出省略不写->
C3P0
配置文件名必须为 c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- This is default config! -->
<default-config>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config> <!-- This is my config for mysql-->
//自己配置的参数,到时候要使用,直接调用ComboPooledDataSource的时候传个值过来就行了。
<named-config name="mysql">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=UTF8</property>
<property name="user">root</property>
<property name="password"></property>
<!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->
<property name="initialPoolSize">10</property>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->
<property name="maxIdleTime">30</property>
<!--连接池中保留的最大连接数。默认值: 15 -->
<property name="maxPoolSize">100</property>
<!-- 连接池中保留的最小连接数,默认为:3-->
<property name="minPoolSize">10</property>
<!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->
<property name="maxStatements">200</property>
<!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->
<property name="checkoutTimeout" value="3000"/>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->
<property name="acquireIncrement" value="2"/>
<!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->
<property name="acquireRetryAttempts" value="0"/>
<!--重新尝试的时间间隔,默认为:1000毫秒-->
<property name="acquireRetryDelay" value="1000" />
<!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->
<property name="autoCommitOnClose">false</property>
<!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->
<property name="automaticTestTable">Test</property>
<!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->
<property name="breakAfterAcquireFailure">false</property>
<!--每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->
<property name="idleConnectionTestPeriod">60</property>
<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->
<property name="maxStatementsPerConnection"></property>
</named-config> <!-- This is my config for oracle -->
<named-config name="oracle">
<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="user">scott</property>
<property name="password">liang</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</named-config>
</c3p0-config>
代码如下:
//获取配置文件
DataSource source = new ComboPooledDataSource("自定义配置文件名");
Connection conn = source.getConnection();
PreparedStatement stmt = conn.PreparedStatement("Selet *from
student_data where name= ?");
stmt.setString("xiaojiang");
ResultSet rs = stmt.executeQuery();
<!-下面输出省略不写->
方法二 :
//直接设置连接参数
ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql//127.0.0.1:3306/mydata");
source.setUser("root");
source.setPassword("root");
Connection conn = source.getConnection();
PreparedStatement stmt = conn.PreparedStatement("Selet *from
student_data where name= ?");
stmt.setString("xiaojiang");
ResultSet rs = stmt.executeQuery();
<!-下面输出省略不写->
DBCP + C3P0 连接池的更多相关文章
- dbcp/c3p0连接池设置mysql会话变量
我们有几个计算风控值的定时任务,几乎每隔5秒会更新所有账户的当前总资产并以此通知风控,每隔一小时就产生一两个G的binlog,几十台服务器折腾..数据库是公用的,代码是通过工具自动生成的,直接修改流程 ...
- C3P0连接池、DBCP连接池
C3P0连接池: 配置文件:c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c ...
- DBCP连接池与c3p0连接池
1. DBCP连接池
- 在jdbc基础上进阶一小步的C3p0 连接池(DBCP 不能读xml配置文件,已淘汰) 和DBUtils 中两个主要类QueryRunner和ResultSetHandler的使用
首先看C3p0这个连接池,最大优势可以自动读取默认的配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
- C3P0连接池温习1
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...
- Java开发笔记(一百五十)C3P0连接池的用法
JDBC既制定统一标准兼容了多种数据库,又利用预报告堵上了SQL注入漏洞,照理说已经很完善了,可是人算不如天算,它在性能方面不尽如人意.问题出在数据库连接的管理上,按照正常流程,每次操作完数据库,都要 ...
- day39-Spring 15-Spring的JDBC模板:C3P0连接池配置
<!-- 配置C3P0连接池 --> <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPo ...
- dbcp数据源连接池
一.数据源连接池 我们之前利用jdbc连接数据库,每次都要创建连接对象,销毁连接对象,如果并发访问量比较大,这样肯定比较辣 浪费数据库的效率,我们可以像之前mybatis中缓存查询到的数据一样,可以把 ...
随机推荐
- 吴裕雄--天生自然 JAVA开发学习:变量类型
public class Variable{ static int allClicks=0; // 类变量 String str="hello world"; // 实例变量 pu ...
- 洛谷 P1082 同余方程(exgcd)
题目传送门 解题思路: 因为推导过程过于复杂,懒得写,所以题解传送门 AC代码: #include<iostream> #include<cstdio> using names ...
- CountDownLatch 我的应用场景
记得我是做一个第三方接口,当时需要拿公司的五万辆车通过每周四的夜间去获取违章数据: 三方当时只提供一个只能一辆车去获取未处理的违章数据: 接口是http的方式获取: 当时我是用CountDownLat ...
- ZEOSDBO控件的安装及使用方法
步骤:1:下载最新版的ZEOSDBO,官网:http://sourceforge.net/projects/zeoslib/ 2:解压文件到文件安装目录下:C:\Program Files\Embar ...
- spring02-组件注册-@ComponentScan-自动扫描组件&指定扫描规则
上一篇我们讲到,讲@Bean注解标在某个方法上,那么ioc容器启动的时候就会将方法返回值放到ioc容器中 在开发中,实际上包扫描用的比较多,接下来我们会介绍两种方式一种是基于xml,一种是基于注解. ...
- 包-logging-hashlib-深浅拷贝
一.包: 包的本质就是一个模块 什么是包:它是一系列模块文件的结合体,表示形式就是一个文件夹,该文件夹内部通常会有一个__init__..py的文件 导入包的过程:先产生一个执行文件的名称空间 1:创 ...
- 启动查看crontab日志服务
方法1: . 修改rsyslog文件,将/etc/rsyslog.d/-default.conf 文件中的#cron.*前的#删掉: . 重启rsyslog服务service rsyslog rest ...
- Getting Started with STM32 in Segger Embedded Studio
初识Segger Embedded Studio(SES) 第一次见SES是在“安富莱电子论坛”上,“硬汉”提到SES的一些特性,再加上Jlink的大名,于是试试他们家的IDE. SES貌似也是基于E ...
- mysql之存储过程(一)
今天开发一个需求,需要在一个旧表中增加一列并且对已经的表中记录初始化新列的值, 由于是一次性的工作,故写了个存储过程来代替代码程序初始化 创建及执行过程记录如下: MySQL [XXX_YYY]> ...
- 微信公众平台开发2-access_token获取及应用(含源码)
微信公众平台开发-access_token获取及应用(含源码) 很多系统中都有access_token参数,对于微信公众平台的access_token参数,微信服务器判断该公众平台所拥有的权限,允许或 ...