连接池的总结

简介: 连接池的总结

最近项目中用到了spring的连接池,现在记录一下自己认为对线程池的一些理解。


一、原理


     由于数据库连接是一种关键的有限的资源,所以对数据库连接的管理会影响到整个项目的性能,对那些需要高性能的项目显得至关重要。


连接池能够很有效的提升性能,而其的原理如下:


     系统在启动的时候创建默认数量的数据库连接,然后保存到内存中,而在系统运行过程中不再在使用数据库的时候新建一个连接,而是从内存中获取当前空闲的连接,当使用完毕后,也不是用户主动关闭连接,而是重新放入到内存中,提供下一次连接使用。我们可以通过参数的配置设置连接池的初始化大小、连接的上下限数、空闲时间等来进行控制。


二、要素


     最大连接数:如果数据库连接数超过了该数目,那么接下来的数据库连接将被放入请求队列中,会影响到后面的数据库操作。


     最小连接数:是连接池一直保持的连接数目,如果设置的过大,那么空闲的连接数将会非常浪费资源。


如果两个数目相差的太大,那么超过最小连接数的连接将会是一个新建的连接,而这个超过最小数目的连接不会马上释放,而是会被放入连接池等待重复连接,或者等待超时释放。


     这两个数目的设置需要衡量到项目真实运行过程中,同时会被建立的连接数;当然需要考虑到数据库默认的连接数,两者之间需要进行匹配。


三、常用类型(先举出我们项目中的一个连接方式,以后再探讨其他的连接方式)


1.apache的DBCP


目前我们项目中用到的是这个方式

<property name="maxActive" value="500"></property>
  <property name="maxIdle" value="50"></property>
  <property name="maxWait" value="200"></property>
  <property name="testOnBorrow" value="true" />
        <property name="validationQuery">
            <value>select 1 from dual</value>
        </property>




说明:


initialSize:连接池初始化启动时的大小,默认为0


maxActive:可以从线程池中取出的最大连接数,默认为8,据说单机器高峰期并发20,0表示没有限制


maxidle:线程池中最大等待中连接数,0表示没有限制


minidle:线程池中最小等待连接数


maxwait:最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间,如果超时,则会抛出异常


validationquery:验证连接是否成功,sql至少要返回一行


testOnBorrow:获取对象时是否进行验证,默认为false,最好设置为true,因为如果数据库因为某种原因挂起,而再从连接池中取出连接又不进行验证,那么取得的连接依然是无效的。


timebetweenevictionrunsmillis:如果大于0,则在指定时间对空闲连接进行验证,默认为30分钟;mysql的连接空闲时间为8小时,即一个连接超过8小时,mysql会自动断开该连接,而spring是不知道的,那么连接池中的该条连接就失效了。


2.C3P0


3.Proxool


以上连接池的使用依然在调试中,希望对你有所帮助。

相关文章
|
6月前
|
SQL 网络协议 数据库连接
什么是数据库连接池?为什么需要数据库连接池呢?
什么是数据库连接池?为什么需要数据库连接池呢?
|
druid Java 数据库连接
什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
763 0
什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
|
1月前
|
SQL 监控 Java
C3P0数据库连接池
C3P0数据库连接池
|
6月前
|
SQL druid Java
Driud数据库连接池的使用
Driud数据库连接池的使用
84 0
|
6月前
|
Java 关系型数据库 MySQL
数据库连接池的实现
数据库连接池的实现
|
SQL 缓存 关系型数据库
连接池设置
连接池设置
109 0
|
监控 Java 数据库连接
c3p0连接池
c3p0连接池
141 0
|
监控 Java 数据库连接
HikariCP连接池
HikariCP连接池
132 0
连接池问题
连接池问题
170 0
|
SQL Oracle druid
常见的数据库连接池
JDBC(Java Database Connectivity)是一个独立于特定数据库 管理系统、通用的SQL数据库存取和操作的公共接口(一组API) , 定义了用来访问数据库的标准Java类库,( java.sql.javax.sql )使用这些类库可以以一种标准的方法、方便地访问数据库资源。
常见的数据库连接池