最近项目中用到了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
以上连接池的使用依然在调试中,希望对你有所帮助。
相关推荐
Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...
Java JDBC 数据库连接池总结 Java JDBC 数据库连接池是 Java 应用程序访问数据库的基本原理之一。Java 语言通过 JDBC 技术访问数据库,JDBC 是一种“开放”的方案,为数据库应用开发人员和数据库前台工具开发人员...
Java JDBC 数据库连接池技术是Java应用程序访问数据库的关键优化手段,尤其在Web应用程序中,它解决了传统JDBC连接方式存在的效率低下和资源浪费问题。Java JDBC(Java Database Connectivity)是Java语言与各种...
Java JDBC数据库连接池总结 Java JDBC(Java Database Connectivity)是Java语言访问数据库的标准接口,它允许应用程序通过编写Java代码来与各种数据库进行交互。在Web应用程序中,由于B/S架构的普及,Java JDBC...
【JDBC数据库连接池总结】 在Java开发中,JDBC(Java Database Connectivity)是用于连接应用程序和数据库的关键技术。JDBC提供了一套API,使得开发者能够以标准的方式编写数据库交互代码。然而,直接使用JDBC在高...
JDBC数据库连接池总结 一、JDBC数据库连接池概述 在基于B/S架构的三层开发模式中,Java应用程序访问数据库的基本原理是通过JDBC(Java DataBase Connection)技术。JDBC是一种“开放”的方案,为数据库应用开发...
总结来说,Java JDBC数据库连接池是解决Web应用中数据库访问性能问题的有效工具,通过统一管理和复用数据库连接,降低了系统资源消耗,提高了应用的响应速度和稳定性。合理配置和使用连接池,对于构建高效、稳定的...
数据库连接池是Java应用中用于管理数据库连接的一种高效技术,它有效地解决了频繁创建和销毁数据库连接导致的资源浪费问题。本篇文章将深入探讨Java JDBC数据库连接池的工作原理及其重要性。 ### 数据库连接池的...
Java JDBC 数据库连接池是一种优化数据库访问效率的技术,它解决了传统JDBC模式中频繁创建和关闭数据库连接导致的性能问题。随着互联网技术的发展,B/S架构的3层开发模式成为主流,Java的Servlet+JSP+JavaBean技术因...
### Java JDBC 数据库连接池详解 #### 一、引言 随着互联网技术的快速发展和广泛应用,Web应用程序的需求日益增加,特别是在企业级应用和电子商务领域。传统C/S(客户端/服务器)架构逐步被B/S(浏览器/服务器)...
总结来说,Kafka生产者连接池是通过复用连接资源来优化Kafka生产者性能的一种高效策略,结合Apache Commons Pool 2这样的对象池库和自定义的`kafkaPool-v1.0.jar`实现,可以提供更稳定、高效的Kafka生产环境。...
Java数据库连接池驱动是Java应用程序在访问数据库时用于优化资源管理的一种技术。它提供了一种在多个数据库操作之间重用数据库连接的方式,从而避免了频繁创建和关闭连接带来的性能开销。连接池的核心思想是池化资源...
总结来说,Socket客户端连接池是优化网络通信性能的有效手段,通过复用Socket连接,减少了网络开销和系统资源消耗。理解和掌握连接池的实现原理,以及如何在项目中合理配置和使用,对于提升服务的稳定性和效率有着...
### C3P0连接池的工作总结 #### 一、C3P0连接池概述 C3P0(读作“See Three Oh”)是一个开源的JDBC连接池项目,它实现了数据源和JNDI绑定,支持JDBC连接池的全过程管理。C3P0是一个纯Java编写的持久层框架,它...
总结,结合Oracle数据库和C++的连接池技术,可以构建高效、稳定的企业级应用。理解并掌握这些知识点,对于开发人员来说至关重要,能帮助他们在面对大数据量、高并发的场景时,更好地设计和优化系统。
总结来说,C# Socket连接池是提高网络应用性能的重要工具,它结合了线程池的优点,有效地管理和复用Socket资源。通过Windows计数器,我们可以对线程池的性能进行实时监控,从而进行有针对性的优化。理解和掌握这一...