数据库连接池的一些基本理解,c3p0和druid
数据库连接池
1,概念:
其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来采访数据时,从容器中获取连接对象,用户访问完后,会将连接对象归还给容器
2,好处:
1,节约资源
2,用户访问高效
3,实现:
1,标准接口:DataSource java.xql包下的
这个接口是没有java官方是没有提供实现类的!
方法:
获取连接:Connection getConnection()
归还连接:如果连接对象Connection是从连接池里获得的,那么调用Connection.close()方法,则不会再关闭连接了,而是归还连接
2,一般我们不去实现它,有数据库厂商来实现
1,C3P0:数据库连接池技术
2,Druid:数据库连接池的技术,由阿里巴巴提供的
C3P0
步骤:
1,导入两个jar包,也不要忘了导入musql那个jar包
c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar2,定义配置文件
配置文件名称:
c3p0.properties 或 c3p0-config.xmlxml文件内容: xml文件名就是上面那个
<c3p0-config>
<!--使用默认的配置读取连接池对象 -->
<default-config>
<!--连接参数-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///zhoupeng</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 连接池参数-->
<property name="initialPoolSize">5</property> <!--//初始化连接池-->
<property name="maxPoolSize">10</property><!--连接池最大数-->
<property name="checkoutTimeout">3000</property><!--初始化等待时间,如果3秒没有创建完成,会出异常-->
</default-config>
<named-config name="otherc3p0">
<!--连接参数-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///zhoupeng</property>
<property name="user">root</property>
<property name="password">root</property>
<!--连接池参数-->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>路径:
直接将文件放在src目录下3,创建核心对象 数据库连接池对象 ComboPooledDataSource
DataSource dataSources = new ComboPooledDataSource();4,获取连接:get Connection
Connection connection = dataSources.getConnection();
c390xml文件的验证
<property name="maxPoolSize">10</property><!--连接池最大数-->
验证代码1:
DataSource ds = new ComboPooledDataSource();
for (int i = 0; i <10 ; i++) {
Connection c = ds.getConnection();
System.out.println(i+": "+c);
}
验证代码2:
DataSource ds = new ComboPooledDataSource();
for (int i = 0; i <11 ; i++) {
Connection c = ds.getConnection();
System.out.println(i+": "+c);
}
结果1:
0: com.mchange.v2.c3p0.impl.NewProxyConnection@3d5c822d [wrapping: com.mysql.jdbc.JDBC4Connection@6f46426d]
1: com.mchange.v2.c3p0.impl.NewProxyConnection@49c7b90e [wrapping: com.mysql.jdbc.JDBC4Connection@10d307f1]
2: com.mchange.v2.c3p0.impl.NewProxyConnection@3e84448c [wrapping: com.mysql.jdbc.JDBC4Connection@4a7f959b]
3: com.mchange.v2.c3p0.impl.NewProxyConnection@5403f35f [wrapping: com.mysql.jdbc.JDBC4Connection@483f6d77]
4: com.mchange.v2.c3p0.impl.NewProxyConnection@63a12c68 [wrapping: com.mysql.jdbc.JDBC4Connection@28f3b248]
5: com.mchange.v2.c3p0.impl.NewProxyConnection@32b260fa [wrapping: com.mysql.jdbc.JDBC4Connection@581ac8a8]
6: com.mchange.v2.c3p0.impl.NewProxyConnection@57d7f8ca [wrapping: com.mysql.jdbc.JDBC4Connection@76c3e77a]
7: com.mchange.v2.c3p0.impl.NewProxyConnection@67c33749 [wrapping: com.mysql.jdbc.JDBC4Connection@fba92d3]
8: com.mchange.v2.c3p0.impl.NewProxyConnection@fa49800 [wrapping: com.mysql.jdbc.JDBC4Connection@71238fc2]
9: com.mchange.v2.c3p0.impl.NewProxyConnection@16a0ee18 [wrapping: com.mysql.jdbc.JDBC4Connection@3d6f0054]
结果2:
0: com.mchange.v2.c3p0.impl.NewProxyConnection@3d5c822d [wrapping: com.mysql.jdbc.JDBC4Connection@6f46426d]
1: com.mchange.v2.c3p0.impl.NewProxyConnection@49c7b90e [wrapping: com.mysql.jdbc.JDBC4Connection@10d307f1]
2: com.mchange.v2.c3p0.impl.NewProxyConnection@3e84448c [wrapping: com.mysql.jdbc.JDBC4Connection@4a7f959b]
3: com.mchange.v2.c3p0.impl.NewProxyConnection@5403f35f [wrapping: com.mysql.jdbc.JDBC4Connection@483f6d77]
4: com.mchange.v2.c3p0.impl.NewProxyConnection@63a12c68 [wrapping: com.mysql.jdbc.JDBC4Connection@28f3b248]
5: com.mchange.v2.c3p0.impl.NewProxyConnection@32b260fa [wrapping: com.mysql.jdbc.JDBC4Connection@581ac8a8]
6: com.mchange.v2.c3p0.impl.NewProxyConnection@57d7f8ca [wrapping: com.mysql.jdbc.JDBC4Connection@76c3e77a]
7: com.mchange.v2.c3p0.impl.NewProxyConnection@67c33749 [wrapping: com.mysql.jdbc.JDBC4Connection@fba92d3]
8: com.mchange.v2.c3p0.impl.NewProxyConnection@fa49800 [wrapping: com.mysql.jdbc.JDBC4Connection@71238fc2]
9: com.mchange.v2.c3p0.impl.NewProxyConnection@16a0ee18 [wrapping: com.mysql.jdbc.JDBC4Connection@3d6f0054]
Exception in thread "main" java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:690)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
at ShuJuKuLianJieChi.main(ShuJuKuLianJieChi.java:12)
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@15aab8c6 -- timeout at awaitAvailable()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1505)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:758)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:685)
... 2 more
Druid
步骤:
1,还是先导jar包,druid-1.2.9.jar
2,定义配置文件
可以是properties形式的
可以任意名字,可以放任意目录(意思是需要手动导入了)
建议还是放到src下
dirverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///zhoupeng
username=root
password=root
# 这些和刚刚c3p0的配置文件差不多,就不写多的注释了
initialSize=5
maxActive=10
maxWait=30003,加载配置文件
Properties p = new Properties();
InputStream in = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
p.load(in);4,获取数据库连接池对象:
通过一个工厂来获取:DruidDataSourceFactory
DataSource ds = DruidDataSourceFactory.createDataSource(p);5,获取连接,getConnection
Connection c=ds.getConnection();
数据库连接池的一些基本理解,c3p0和druid的更多相关文章
- .数据库连接池技术:DBCP和C3P0
数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...
- JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术
本文目录: 1.应用程序直接获取连接的缺点(图解) 2.使用数据库连接池优化程序性能(图解) 3.可扩展增强某个类方法的功能的三种方式 4.自定 ...
- 数据库连接池和connection的理解
数据库连接池Data Source Pool的理解 1.数据库连接池允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个连接,避免了每个方法里new connection的耗费资源和时间. ...
- 数据库连接池dataesoruce pool深入理解
8.数据库连接池的connection都是长连接的,以方便多次调用,多人连续使用.dataSourcePool9.数据库连接池中的连接,是在你用完之后,返回给数据库连接池的,并不是close()掉,而 ...
- 理解数据库连接池和ThreadLocal实现的事务控制
我发现 不少人 误解了这两者. csdn上也有人提出过这种疑问: http://bbs.csdn.net/topics/250061733 经过查阅资料和认真分析,我特说明一下这两者概念上的区别. 我 ...
- JDBC(三)数据库连接池(DBCP、C3P0)
前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...
- java_JDBC,连接数据库方式,RestSet结果集,Statement,PreparedStatement,事务,批处理,数据库连接池(c3p0和Druid)、Apache-DBUtils、
一.JDBC的概述 1.JDBC为访问不同的数据薛是供了统一的接口,为使用者屏蔽了细节问题.2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作 ...
- 数据库连接池Druid的介绍,配置分析对比总结
Druid的简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBos ...
- 从零开始学 Java - 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
随机推荐
- Python模拟服务端
本机服务端 import socket # 获取到socket sk = socket.socket() # 获取到地址 ip 和 端口号 address = ('127.0.0.1', 8001) ...
- 齐博x1 小程序与公众号长期永久订阅消息的申请方法
要给用户发送消息提醒的话,需要申请订阅消息.订阅消息分一次性订阅与长期永久性订阅.一次性订阅没有实际意义,用户订阅一次就只能发送一次.这里主要是指导大家如何申请永久长期订阅功能.对于公众号而言,大家先 ...
- python实现鼠标手动截图(类似于QQ截图)
由于在网上找了很久,只找到按像素位置截图和全屏截图的,所以决定自己写一个. 本程序实现原理是现用PIL里的ImageGrab进行全屏截图,然后通过模拟鼠标操作,进行截图,最后删除全屏截图,只留下鼠标截 ...
- LcdToos如何在线对屏进行读写指令调试
在实际屏调试过程中,工程师经常需要对屏的寄存器频繁进行参数修改和读取测试,LcdTools针对这个做了很好的支持,可以在线进行指令调试,大大提高调试效率. 打开点屏工程,连接PX01并使模组上电点亮. ...
- 十九、Service Ingress
Service Ingress Ingress-Nginx github 地址:https://github.com/kubernetes/ingress-nginx Ingress-Nginx 官方 ...
- iptables介绍和基本使用
iptables 防火墙是什么 防火墙好比一堵真的墙,能够隔绝些什么,保护些什么. 防火墙的本义是指古代构筑和使用木制结构房屋的时候,为防止火灾的发生和蔓延,人们将坚固的石块堆砌在房屋周围作为屏障,这 ...
- 抓包分析 TCP 握手和挥手
前言 首先需要明确的是 TCP 是一个可靠传输协议,它的所有特点最终都是为了这个可靠传输服务.在网上看到过很多文章讲 TCP 连接的三次握手和断开连接的四次挥手,但是都太过于理论,看完感觉总是似懂非懂 ...
- Linux环境jdk安装配置
1.jdk安装包:jdk-8u191-linux-x64.tar.gz2.拷贝 jdk-8u191-linux-x64.tar.gz 到/usr/local命令如下:cp jdk-8u191-linu ...
- 【云原生 · Kubernetes】Jenkins+Gitlab+Rancher+Docker 实现自动构建镜像的 CI 平台(一)
1 准备 Jenkins+Gitlab 实验环境 1.1 准备实验环境:恢复到以一下快照:该环境已经配置好 jenkins+gitlab+sonar-配置通 主机角色: IP 地址 运行的服务 硬件配 ...
- 【Java集合框架001】为什么重写equals就要重写hashcode?
一.前言 如果面试官问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法? 遇到这样的问题,应该怎样回答呢?其实,equals和hashCode都 ...