数据库连接池的一些基本理解,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
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
随机推荐
- BigDecimal 用法总结
转载请注明出处: 目录 1.BigDecimal 简介 2.构造BigDecimal的对象 3.常用方法总结 4.divide方法使用 5.setScale 方法使用 6.BigDecimal 数据库 ...
- 分布式存储系统之Ceph集群MDS扩展
前文我们了解了cephfs使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16758866.html:今天我们来聊一聊MDS组件扩展相关话题: 我们 ...
- 简析 Linux 的 CPU 时间
从 CPU 时间说起... 下面这个是 top 命令的界面,相信大家应该都不陌生. top - 19:01:38 up 91 days, 23:06, 1 user, load average: 0. ...
- MyBatis的各种查询功能
1.查询一个实体类对象 /** * 根据用户id查询用户信息 * @param id * @return */ User getUserById(@Param("id") int ...
- Windows应急响应——敬请期待!
检查内容 进程.服务.用户.网络连接.漏洞补丁.木马查杀. 工具 火绒剑. 防护措施 杀毒软件
- jstl的使用 转发和重定向(做项目遇到的一些问题总结)
文章目录 1.jstl的使用 2.转发和重定向 3.shiro 4.spring是什么? 5.对AOP的理解 6.标签通常和标签一起使用 7.springmvc中的form表单 7.1 form标签 ...
- 3.pygame快速入门-游戏循环及动画实现
游戏循环的开始,意味着游戏的正式开始,游戏循环的作用如下 1.保证游戏不会直接退出 2.变化图像的位置--动画效果 3.检测用户交互--按键.鼠标等 游戏时钟 pyagame提供了一个pyga ...
- CF240F (26颗线段树计数)
题目链接:Topcoder----洛谷 题目大意: 给定一个长为n的由a到z组成的字符串,有m次操作,每次操作将[l,r]这些位置的字符进行重排,得到字典序最小的回文字符串,如果无法操作就不进行. 思 ...
- 浅谈HTTP缓存与CDN缓存的那点事
HTTP缓存与CDN缓存一直是提升web性能的两大利器,合理的缓存配置可以降低带宽成本.减轻服务器压力.提升用户的体验.而不合理的缓存配置会导致资源界面无法及时更新,从而引发一系列的衍生问题.本文将分 ...
- ubuntu等debian系linux系统添加人脸识别howdy
准备 proxychains proxychains是用来给终端走代理的软件,因为下载howdy的时候有一部分的文件的服务器在国外,且被墙了. 安装proxychains sudo apt insta ...