1.为什么使用连接池?
数据库连接是一种关键的有限的昂贵的资源,传统数据库连接每发出一个请求都要创建一个连接对象,使用完直接关闭不能重复利用;
关闭资源需要手动完成,一旦忘记会造成内存溢出;
请求过于频繁的时候,创建连接极其消耗内存;
而且一旦高并发访问数据库,有可能会造成系统崩溃。
为了解决这些问题,我们可以使用连接池。
2.传统JDBC的缺点
用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。
假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。
3.连接池原理
在服务器端一次性创建多个连接,将多个连接保存在一个连接池对象中,当应用程序的请求需要操作数据库时,不会为请求创建新的连接,而是直接从连接池中获得一个连接,操作数据库结束之后,并不需要真正关闭连接,而是将连接放回到连接池中。
节省创建连接、释放连接 资源。
4.自定义连接池
编写自定义连接池。
创建连接池并实现接口javax.sql.DataSource,并使用接口中的getConnection()方法。
提供一个集合,用于存放连接,可以采用LinkedList。
后面程序如果需要,可以调用实现类getConnection(),并从list中获取链接。为保证当前连接只能提供给一个线程使用,所以我们需要将连接先从连接池中移除。
当用户用完连接后,将连接归还到连接池中。
5.数据库连接池与JDBC的区别如下:
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
6.Tomcat内置连接池
因为Tomcat和 dbcp 都是Apache公司项目,Tomcat内部连接池就是dbcp。
Tomcat支持Servlet、JSP等,类似于容器,但并不支持所有JavaEE规范,JNDI就是JavaEE规范之一。
开发者通过JNDI方式可以访问Tomcat内置连接池。
使用Tomcat内置连接池的前提
将web工程部署到Tomcat三种方式: 配置server.xml <Context> 元素、配置独立xml文件 <Context> 元素 、直接将网站目录复制Tomcat/webapps
虚拟目录 ---- <Context> 元素
若想使用Tomcat内置连接池,必须要在Context元素中添加Resource标签,具体代码如下:
<Context>
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="123" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/day14"/>
</Context>