数据库连接池(基于MySQL数据库)

使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的?



通过代码:

conn=DriverManager.getConnection(url, username, password);

JDBC通过这条代码方法的调用建立了一条客户端应用程序到后端数据库的物理连接。期间发生了大量的基于TCP的客户端与服务端的交互。

由于跨机器的网络传输是由较大的网络开销的,所以时间花销很大。

传统的多线程JDBC服务中,我们每进行一次服务都需要分配一个线程,每一个线程去建立一个数据库连接,当这条服务结束之后,该线程和该数据库连接都将被销毁。

当我们需要下一次数据库服务时,再次建立新的线程和数据库连接。

这样每次在建立数据库连接上浪费了大量的时间,用户的相应时间变得很慢。

连接池的出现就是为了解决这个问题,连接池实现了数据库连接(connection对象)的复用,当一个线程处理完相应程序服务,随后不紧接着销毁数据库连接,而是把它交给下一个线程使用。这样就避免了多次建立数据库连接而浪费时间的问题出现。实现了从每个线程创建数据库连接到每个线程租用数据库连接的转变。

MySQL数据库内部是怎么分配各种连接的?



在MySQL数据库中也存在着内存限制,当分配的数据库连接过多,会增加数据库内存的占用,加剧各种锁的冲突,占用数据库资源,甚至造成数据库崩溃。所以一般在MySQL数据库中设置最大连接数。

但是,为了保证不出现上述问题,我们可以在连接请求到达数据库之前进行限流,保证数据库资源的优化利用,效率至上。连接池就起到了这个作用:限制连接。

连接池到底是什么?



连接池本质上就是一组java的jar包,介于java应用和JDBC数据库物理连接之间,帮助应用程序来管理数据库连接,通过连接池暴露的接口,应用程序可以获取JDBC连接,使用完后

将JDBC归还给连接池,供下一个线程使用。

在连接池中,数据库连接不足的时候,会自动创建连接;同时当空闲连接过多时也会自动销毁连接。

当多个线程同时访问时,连接池还提供了排队等待的功能。保证了应用程序有序地获取数据库连接。

连接池怎么使用?



以现在最受欢迎的JDCP连接池为例。

相关jar包下载地址:

http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

http://commons.apache.org/proper/commons-pool/download_pool.cgi

http://commons.apache.org/proper/commons-logging/download_logging.cgi

其中,有两种jar版本,windows推荐下载.zip版

关于两版的差别,参考:

http://blog.csdn.net/suyu_yuan/article/details/52733117

https://www.zhihu.com/question/26026741

1)创建一个连接池对象:

因为JDCP的底层也是通过JDBC来实现的,所以我们需要告诉它相应的信息。

原文地址:https://www.cnblogs.com/dudududu/p/8537606.html

时间: 2024-08-02 19:26:44

数据库连接池(基于MySQL数据库)的相关文章

DBCP数据库连接池连接mysql数据库的时候 出现连接问题

在部署的项目的时候发现两个问题 ,第一个问题不是太容易发现 ,因为我部署的时候没问题 ,但是产品的同事在跑流程的时候总是出现一个connetException异常  自己看了半天没发现什么问题 去网上查了一下 说是msql的连接默认是八个小时 第二个问题就是 自己这边的数据库 隔一段时间不用的话 会自动断开  查了一下资料 是dbcp连接mysql时出现的这个问题  实际上两个问题算是一个问题吧 自己配置了一下 这几天没报这样的错误 !算是解决了吧!  <bean id="dataSour

Myeclipse WEB工程JSP使用JNDI 数据库连接池连接Mysql数据库

在网上查了很多,最后实现了.下面写一下过程: 首先,在WEBROOT/META-INF下建一个文件context.xml,内容为: <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/ConnectionPool" auth="Application" type="javax.sql.DataSour

Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例【转】

Spring mvc整合mybatis例子, 基于mysql数据库实现对用户的增.删.改.查,及分页显示的完整例子. 查询显示用户 添加用户 更新用户 官方验证: 项目截图 必须修改applicationContext.xml中mysql的配置为本地的,否则启动失败. 另外jar包多一个ehcache.jar无关紧要,删除即可. 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库

在Jena框架下基于MySQL数据库实现本体的存取操作

在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统.其中对本体的操作部分,我使用的是Jena框架:数据模型是基于本体的语义模型:数据存储则是MySQL 5.5.9版本.由此看来,将本体模型存入数据库和从数据库中取出模型是常用的操作,这里总结一下我学到的方法. 我使用的开发环境是Eclipse3.6,在开发前要将必要的与jena有关的类包加入java

ip代理池-基于mongodb数据库

代码用的python2.7,抓取xici免费代理,检测放入数据库中,为以后爬虫做准备.下面直接上代码 1 #-*-encoding=utf-8-*- 2 3 import requests 4 from lxml import etree 5 import time 6 import pymongo 7 from multiprocessing import Pool 8 9 10 class Getproxy(object): 11 def __init__(self): 12 self.he

FTP服务(4)基于MySQL数据库认证

基于MySQL数据库认证 说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器 数据库服务器和FTP服务器系统都是CentOS7 注意:如果是CentOS6系统请执行yum install vsftpd pam_mysql命令安装连接组件 MariaDB服务器: yum install mariadb-server -y systemctl start mariadb mysql MariaDB [(none)]> CREATE DATABASE vsftpddb;

spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍

包括JDBC.JPA.MyBatis.多数据源和事务. 一.JDBC 连接数据库 1.属性配置文件(application.properties) spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driv

关于c3p0连接池连接mysql数据库需要注意的几点

什么是数据库连接池: 用池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象. 当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection"归还"给池.池就可以再利用这个Connection对象了. 导入DBUtils的工具包:commons-dbutils-1.6.jar commons-dbuti

基于mysql数据库集群的360度水平切割

1.why sharding? 我们都知道,信息行业发展日益迅速,积累下来的数据信息越来越多,互联网公司门要维护的数据日益庞大.设想一下,假如腾讯公司只用一个数据库的一张表格来存储所有qq注册用户的登录相关信息,毫不夸张的说,那好比就是一场灾难,腾讯少说都有好几个亿的用户,所有的信息都存储在一个数据库的一张表中,那么我们的sleect语句那得多么的消耗硬件资源,用户体验度那是相当的差的,基本上不能去运行了,那谁还去用qq,那怎么办呢,数据分割这时候就派上用场了,它根据数据的特性,将一张表单上的内