连接先建立一些连接,并且这些连接允许共享,因此这样就节省了每次连接的时间开销。Mysql数据库为例,连接池在Tomcat中的配置与使用。
1、创建数据库Student,表student
2、配置server.xml文件。Tomcat安装目录下conf中server.xml文件。
<GlobalNamingResources>
<Resource
name="jdbc/DBPool"
type="javax.sql.DataSource"
password=""
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://localhost:3306/student"
maxActive="3"
/>
</GlobalNamingResources>
name:指定连接池的名称
type:指定连接池的类,他负责连接池的事务处理
url:指定要连接的数据库
driverClassName:指定连接数据库使用的驱动程序
username:数据库用户名
password:数据库密码
maxWait:指定最大建立连接等待时间,如果超过此时间将接到异常
maxIdle:指定连接池中连接的最大空闲数
maxActive:指定连接池最大连接数
3、配置web.xml文件。
<web-app>
<resource-ref>
<description>mysql数据库连接池配置</description>
<res-ref-name>jdbc/DBPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
4、配置context.xml文件
与server.xml文件所在的位置相同。
<Context>
<ResourceLink
name="jdbc/DBPool"
type="javax.sql.DataSource"
global="jdbc/DBPool"
/>
</Context>
5、测试
DataSource pool = null;
Context env = null;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
env = (Context)new InitialContext().lookup("java:comp/env");
//检索指定的对象,返回此上下文的一个新实例
pool = (DataSource)env.lookup("jdbc/DBPool");
//获得数据库连接池
if(pool==null){out.printl("找不到指定的连接池!");}
con = pool.getConnection();
st = con.createStatement();
rs = st.executeQuery("select * from student");
}catch(Exception ex){out.printl(ne.toString());}
② spring连接池配置详解
数据库连接池概述
数据库连接是一种关键的有限的昂贵的资源 这一点在多用户的网页应用程序中体现得尤为突出 对数据库连接的管理能显着影响到整个应用程序的伸缩性和健壮性 影响到程序的性能指标 数据库连接池正是针对这个问题提出来的
数据库连接池负责分配 管理和释放数据库或碰毁连接 它允许应用程序重复使用一个现有的数据库连接 而再不是重新建立一个 释放空闲时间超过最大空闲时间的数据库连吵返接来避免因为没有释放数据库连接而引起的数据库连接遗漏 这项技术能明显提高对数据库操作的性能
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中 这些数据库连接的数量是由最小数据库连接数来设定的 无论这些数据库连接是否被使用 连接池都将一直保证至少拥有这么多的连接数量 连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数 当应用程序向连接池请求的连接数超过最大连接数量时 这些请求将被加入到等待队列中 数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素
) 最小连接数是连接池一直保持的数据库连接 所以如果应用程序对数据库连接的使用量不大 将会有大量的数据库连接资源被浪费
) 最大连接数是连接池能申请的最大连接数 如果数据库连接请求超过此数 后面的数据库连接请求将被加入到等待队列中 这会影响之后的数据库操作
) 如果最小连接数与最大连接数相差太大 那么最先的连接请求将会获利 之后超过最小连接数量的连接请求等价于建立一个新的数据库连接 不过 这些大于最小连接数的数据库连接在使用完不会马上被释放 它将被放到连接池中等待重复使用或是空闲超时后被释放
目前常用的连接池有 C P DBCP Proxool
网上的评价是
C P 比较耗费资源 效率方面可能要低一点
DBCP在实践中存在BUG 在某些种情会产生很多空连接不能释放 Hibernate 已经放弃了对其的支持
Proxool的负面评价较少 现在比较推荐它 而且它还提供即时监控连接池状态的功能 便于发现连接泄漏的情况
配置如下
在spring配置文件中 一般在applicationContext xml中
<bean id= DataSource class= logicalcobwebs proxool ProxoolDataSource destroy method= shutdown >
<衫备property name= driver >
<value>oracle jdbc driver OracleDriver</value>
</property>
<property name= driverUrl >
<value>jdbc:oracle:thin:xxxx/xxxx@ XX: :server</value>
</property>
<property name= user >
<value>xxxx</value>
</property>
<property name= password >
<value>xxxx</value>
</property>
<property name= alias >
<value>server</value>
</property>
<property name= houseKeepingSleepTime >
<value> </value>
</property>
<property name= houseKeepingTestSql >
<value>select from al</value>
</property>
<property name= testBeforeUse >
<value>true</value>
</property>
<property name= testAfterUse >
<value>true</value>
</property>
<property name= prototypeCount >
<value> </value>
</property>
<property name= maximumConnectionCount >
<value> </value>
</property>
<property name= minimumConnectionCount >
<value> </value>
</property>
<property name= statistics >
<value> m m d</value>
</property>
<property name= statisticsLogLevel >
<value>ERROR</value>
</property>
<property name= trace >
<value>true</value>
</property>
<property name= verbose >
<value>false</value>
</property>
<property name= simultaneousBuildThrottle >
<value> </value>
</property>
<property name= maximumActiveTime >
<value> </value>
</property>
<property name= jmx >
<value>false</value>
</property>
</bean>
然后注入到sessionFactory中
<bean id= sessionFactory class= springframework orm hibernate LocalSessionFactoryBean >
<property name= dataSource ref= DataSource />
</bean>
属性列表说明:
fatal sql exception: 它是一个逗号分割的信息片段 当一个SQL异常发生时 他的异常信息将与这个信息片段进行比较 如果在片段中存在 那么这个异常将被认为是个致命错误(Fatal SQL Exception ) 这种情况下 数据库连接将要被放弃 无论发生什么 这个异常将会被重掷以提供给消费者 用户最好自己配置一个不同的异常来抛出
fatal sql exception wrapper class:正如上面所说 你最好配置一个不同的异常来重掷 利用这个属性 用户可以包装SQLException 使他变成另外一个异常 这个异常或者继承QLException或者继承字RuntimeException proxool自带了 个实现: logicalcobwebs proxool FatalSQLException 和 logicalcobwebs proxool FatalRuntimeException 后者更合适
house keeping sleep time: house keeper 保留线程处于睡眠状态的最长时间 house keeper 的职责就是检查各个连接的状态 并判断是否需要销毁或者创建
house keeping test sql: 如果发现了空闲的数据库连接 house keeper 将会用这个语句来测试 这个语句最好非常快的被执行 如果没有定义 测试过程将会被忽略
injectable connection interface: 允许proxool实现被代理的connection对象的方法
injectable statement interface: 允许proxool实现被代理的Statement 对象方法
injectable prepared statement interface: 允许proxool实现被代理的PreparedStatement 对象方法
injectable callable statement interface: 允许proxool实现被代理的CallableStatement 对象方法
jmx: 如果属性为true 就会注册一个消息Bean到jms服务 消息Bean对象名: Proxool:type=Pool name=<alias> 默认值为false
jmx agent id: 一个逗号分隔的JMX代理列表(如使用MBeanServerFactory findMBeanServer(String agentId)注册的连接池 )这个属性是仅当 jmx 属性设置为 true 才有效 所有注册jmx服务器使用这个属性是不确定的
jndi name: 数据源的名称
maximum active time: 如果housekeeper 检测到某个线程的活动时间大于这个数值 它将会杀掉这个线程 所以确认一下你的服务器的带宽 然后定一个合适的值 默认是 分钟
maximum connection count: 最大的数据库连接数
maximum connection lifetime: 一个线程的最大寿命
minimum connection count: 最小的数据库连接数
overload without refusal lifetime: 这可以帮助我们确定连接池的状态 如果我们已经拒绝了一个连接在这个设定值(毫秒) 然后被认为是超载 默认为 秒
prototype count: 连接池中可用的连接数量 如果当前的连接池中的连接少于这个数值 新的连接将被建立(假设没有超过最大可用数) 例如 我们有 个活动连接 个可用连接 而我们的prototype count是 那么数据库连接池将试图建立另外 个连接 这和 minimum connection count不同 minimum connection count把活动的连接也计算在内 prototype count 是spare connections 的数量
recently started threshold: 这可以帮助我们确定连接池的状态 连接数少还是多或超载 只要至少有一个连接已开始在此值(毫秒)内 或者有一些多余的可用连接 那么我们假设连接池是开启的 默认为 秒
simultaneous build throttle: 这是我们可一次建立的最大连接数 那就是新增的连接请求 但还没有可供使用的连接 由于连接可以使用多线程 在有限的时间之间建立联系从而带来可用连接 但是我们需要通过一些方式确认一些线程并不是立即响应连接请求的 默认是
statistics: 连接池使用状况统计 参数 s m d
statistics log level: 日志统计跟踪类型 参数 ERROR 或 INFO
test before use: 如果为true 在每个连接被测试前都会服务这个连接 如果一个连接失败 那么将被丢弃 另一个连接将会被处理 如果所有连接都失败 一个新的连接将会被建立 否则将会抛出一个SQLException异常
test after use: 如果为true 在每个连接被测试后都会服务这个连接 使其回到连接池中 如果连接失败 那么将被废弃
trace: 如果为true 那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL) 你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息
lishixin/Article/program/Java/ky/201311/28572
③ 什么是数据库连接池,有什么作用
数据库连接是一种有限的昂贵的资源,
数据库连接影响到程序的性能指标。
数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、
管理和释放数据库连接,
它允许应用程序重复使用一个现有的数据库连接,
而再不是重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数
据库连接而引起的数据库连接遗漏。
这项技术能明显提高对数据库操作的性能。
④ MySQL与Redis数据库连接池介绍(图示+源码+代码演示)
数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
简单的说:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。
不使用数据库连接池
如果不使用数据库连接池,对于每一次SQL操作,都要走一遍下面完整的流程:
1.TCP建立连接的三次握手(客户端与 MySQL服务器的连接基于TCP协议)
2.MySQL认证的三次我收
3.真正的SQL执行
4.MySQL的关闭
5.TCP的四次握手关闭
可以看出来,为了执行一条SQL,需要进行大量的初始化与关闭操作
使用数据库连接池
如果使用数据库连接池,那么会 事先申请(初始化)好 相关的数据库连接,然后在之后的SQL操作中会复用这些数据库连接,操作结束之后数据库也不会断开连接,而是将数据库对象放回到数据库连接池中
资源重用:由于数据库连接得到重用,避免了频繁的创建、释放连接引起的性能开销,在减少系统消耗的基础上,另一方面也增进了系统运行环境的平稳性(减少内存碎片以及数据库临时进程/线程的数量)。
更快的系统响应速度:数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。 此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了从数据库连接初始化和释放过程的开销,从而缩减了系统整体响应时间。
统一的连接管理,避免数据库连接泄露:在较为完备的数据库连接池实现中,可根据预先的连接占用超时设定,强制收回被占用连接。从而避免了常规数据库连接操作中可能出现的资源泄露。
如果说你的服务器CPU是4核i7的,连接池大小应该为((4*2)+1)=9
相关视频推荐
90分钟搞懂数据库连接池技术|linux后台开发
《tcp/ip详解卷一》: 150行代码拉开协议栈实现的篇章
学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
需要C/C++ Linux服务器架构师学习资料加qun 812855908 获取(资料包括 C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享
源码下载
下载方式:https://github.com/dongyusheng/csdn-code/tree/master/db_pool(Github中下载)
db_pool目录下有两个目录,mysql_pool目录为MySQL连接池代码,redis_pool为redis连接池代码
下面介绍mysql_pool
CDBConn解析
概念: 代表一个数据连接对象实例
相关成员:
m_pDBPool:该数据库连接对象所属的数据库连接池
构造函数: 绑定自己所属于哪个数据库连接池
Init()函数: 创建数据库连接句柄
CDBPool解析
概念:代表一个数据库连接池
相关成员:
Init()函数:常见指定数量的数据库实例句柄,然后添加到m_free_list中,供后面使用
GetDBConn()函数: 用于从空闲队列中返回可以使用的数据库连接句柄
RelDBConn()函数: 程序使用完该数据库句柄之后,将句柄放回到空闲队列中
测试之前,将代码中的数据库地址、端口、账号密码等改为自己的(代码中有好几处)
进入MySQL, 创建mysql_pool_test数据库
进入到mysql_pool目录下, 创建一个build目录并进入 :
然后输入如下的命令进行编译
之后就会在目录下生成如下的可执行文件
输入如下两条命令进行测试: 可以看到不使用数据库连接池,整个操作耗时4秒左右;使用连接池之后,整个操作耗时2秒左右,提升了一倍
源码下载
下面介绍redis_pool
测试
进入到redis_pool目录下, 创建一个build目录并进入 :
然后输入如下的命令进行编译
之后就会在目录下生成如下的可执行文件
输入如下的命令进行测试: 可以看到不使用数据库连接池,整个操作耗时182ms;使用连接池之后,整个操作耗时21ms,提升了很多
进入redis,可以看到我们新建的key:
⑤ ssm框架中怎么配置数据库连接池
Druid配置
1.下载jar包:http://repo1.maven.org/maven2/com/alibaba/druid/
2.编写数据库连接的资源文件:dbconfig.properties
url:jdbc:mysql://localhost:3306/flm?useUnicode=true&characterEncoding=utf8
driverClassName:com.mysql.jdbc.Driver
username:root
password:root
#------------------------------------------------------------------------------------------
#配置扩展插件 监控统计用filters:stat 日志用filters:log4j 防御sql注入用filters:wall
filters:stat
#最大连接池数量 初始化建立物理连接的个数 获取连接时最长的等待时间 最小连接池数量 maxIdle已经弃用
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
maxIdle:15
#有两个含义 1.Destroy 线程会检测连接的时间 2.testWhileIdle的判断依据
timeBetweenEvictionRunsMillis:60000
#Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接
minEvictableIdleTimeMillis:300000
#用来检测连接是否的sql,要求是一个查询语句。在mysql中通常设置为SELECT 'X'
validationQuery:SELECT 'x'
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery连接是否有效
testWhileIdle:true
#申请连接时执行validationQuery检测连接是否有效 这个配置会降低性能
testOnBorrow:false
#归还连接时执行validationQuery检测连接是否有效 这个配置会降低性能
testOnReturn:false
#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
maxOpenPreparedStatements:20
#对于建立连接超过removeAbandonedTimeout的连接强制关闭
removeAbandoned:true
#指定连接建立多长就被强制关闭
removeAbandonedTimeout:1800
#指定发生removeabandoned时,是否记录当前线程的堆栈信息到日志中
logAbandoned:true
04142434445460414243444546
3.在Spring配置文件ApplicationContext.xml中加载资源文件进来
<!--PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文(配置文 件)中的属性值放在另一个单独的标准java Properties文件中去。-->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/classes/dbconfig.properties</value> <!--dbconfig.properties 数据库连接信息-->
</list>
</property>
</bean> 1234567812345678
4.在Spring配置文件ApplicationContext.xml中配置阿里数据连接池Druid
<!-- 阿里 druid数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- 数据库基本信息配置 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="driverClassName" value="${driverClassName}" />
<property name="filters" value="${filters}" />
<!-- 最大并发连接数 -->
<property name="maxActive" value="${maxActive}" />
<!-- 初始化连接数量 -->
<property name="initialSize" value="${initialSize}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${maxWait}" />
<!-- 最小空闲连接数 -->
<property name="minIdle" value="${minIdle}" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${validationQuery}" />
<property name="testWhileIdle" value="${testWhileIdle}" />
<property name="testOnBorrow" value="${testOnBorrow}" />
<property name="testOnReturn" value="${testOnReturn}" />
<property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="${removeAbandoned}" />
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="${logAbandoned}" />
</bean>
⑥ 数据库连接池最大个数的影响
池是一个很普遍的概念,和衫拆缓冲存储有机制相近的地方,都是缩减了访问的环节,但它更注重于资源的共享。
对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建立"连接池"以提高访问的性能。我们可以把连接当作对象或者设备,池中又有许多已经建立的连接,访问本来需要与数据库的连接的地方,都改为和池相连,池临时分配连接供访问使用,结果返回后,访问将连接交还。
JDBC 1.0标准及其扩展中没有定义连接池,而在JDBC 2.0标准的扩展中定义了或戚枣与连接池相关的接口。与接口对应的类由应用服务器厂商实现,你可在对服务器的管理过程中调节某个数据库连接池的参数。
下面列举了和连接池有仔明关的属性(含数据库连接池最大个数的影响):
Minimum Pool Size 池中保持的连接的最小数目;有新的请求,且没有激活连接可供使用时,池中连接数将增大,到最大连接数为止
Maximum Pool Size 池中保持的连接的最大数目;当这个数目达到,且没有激活连接可供使用时,新的请求将等待
Connection Timeout 当连接数达到最大值,且激活连接都在被使用时,新的请求等待的时间
Idle Timeout 连接可在池中闲置的时间;超过将释放资源,到最小连接数为止
Orphan Timeout 连接在被应用控制时,可闲置的时间;超过将返回池中
⑦ 解释下数据库连接池
odbc,jdbc是不同的数据库连接方式,好比插头的两项和三项,都是用于连接数据库的,java的数据库连接方式有4种,最常用的是JDBC.
oracle.jdbc.driver.OracleDriver是专门为特定的数据库编写的驱动类。jdbc提供了一个统一的接口,各个数据库提供商针对jdbc的标准写自己的数据库驱动。
因差伏为每次请求数据库都需要耗费时间进行连接配旦,好比每次都要拔插头、虚卖携插插头,非常耗费时间,因此把特定的连接放在一个容器里进行管理,连接池里的设置就有连接数量这一项,除了这个还有最大连接时间,超过这个时间,连接池就会断开数据库连接回滚操作。
所以连接池就是用于管理多个连接,软件开发的时候只需要向连接池提交请求就好了。
⑧ Tomcat 的数据库连接池设置与应用
.将数据库驱动程序的JAR文件放在Tomcat的mon/lib中 .在server xml中设置数据源 以MySQL数据库为例 如下 在<GlobalNamingResources></GlobalNamingResources>节点中加入 <Resourcename= jdbc/DBPool type= javax sql DataSource password= root driverClassName= mysql jdbc Driver maxIdle= maxWait= username= root 逗雀url= jdbc:mysql:// : /test maxActive= />属性说明 name 数据源名称 通常取 jdbc/XXX 的格式 type javax sql DataSource ;password 数据库用户密码 driveClassName 数据库驱动 maxIdle 最大空闲数 数据库连接的最大空闲时间 超过空闲时间 数据库连接将被标记为不可用 然后被释放 设为 表示无限制 MaxActive 连接池的最大数据库连接数 设为 表示无限制 maxWait 最大建立连接等待时间 如果超过此时间将接到异常 设为 表示无限制 .在你的web应用程序的web xml中设置数据源参考 如下 在<web app></web app>节点中加入 <resource ref>蔽氏<description>MySQLDBConnectionPool</description><res ref name>jdbc/DBPool</res ref name><res type>javax sql DataSource</res type><res auth>Container</res auth><res sharing scope>Shareable</res sharing scope></resource ref>子节点说明 description 描述信息 res ref name 参考数据源名字 同上一步的属性name res type 资源类型 javax sql DataSource res auth Container res sharing scope Shareable .在web应用程序的context xml中设置数据源链接 如下 在<Context></Context>节点中加入 <ResourceLinkname= jdbc/DBPool type= javax sql DataSource global= jdbc/DBPool />属性说明 name 同第 步和第 步的属性name值 和子节点res ref name值 type 同样取 javax sql DataSource global 同name值 至此 设置完成 下面是如何使用数据库连接池 .建立一个连接池类 DBPool java 用来创建连接池 代码如下 importjavax naming Context;importjavax naming InitialContext;importjavax naming NamingException;importjavax sql DataSource;publicclassDBPool{privatestaticDataSourcepool;static{宏指散Contextenv=null;try{env=(Context)newInitialContext() lookup( java:p/env );pool=(DataSource)env lookup( jdbc/DBPool );if(pool==null)System err println( DBPool isanunknownDataSource );}catch(NamingExceptionne){ne printStackTrace();}}publicstaticDataSourcegetPool(){returnpool;}} .在要用到数据库操作的类或jsp页面中 用DBPool getPool() getConnection() 获得一个Connection对象 就可以进行数据库操作 最后别忘了对Connection对象调用close()方法 注意 这里不会关闭这个Connection 而是将这个Connection放回数据库连接池 lishixin/Article/program/Java/ky/201311/28920
⑨ 数据库连接池的连接池是什么啊
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显着影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1. 最小连接数
是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2.最大连接数
是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3).最小连接数与最大连接数相差太大
那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。