大家好,又见面了,我是你们的朋友全栈君。
一、c3p0数据库连接池介绍
c3p0是应用在Java项目中企业开发中的一个常用的连接池,一般都会配合Java开发框架spring、Hibernate、Mybatis等整合使用,属于开源连接池中性能比较强劲并且受市场比较欢迎的数据库连接池。
之所以项目中会应用连接池,主要是因为我们应用JDBC操作数据库时需要创建连接,然后执行完sql语句之后立马就释放连接,用完之后然后释放非常消耗时间,而大部分消耗时间的部位都在创建和释放连接上,真正使用的时候消耗时间是比较少的,因此,业内人士就开发出了连接池来池化这些连接,然后最大化的减少数据库链接的创建和消耗时间。
c3p0链接池会根据我们自己配置的配置文件中初始化N个连接,连接池就会有一定的空闲连接,这些空闲连接使用后又会释放到连接池中,我们操作数据库时只需要去连接池中拿链接就可以了,这样就避免了持续的创建和销毁连接,节省了很大的性能,性能提升非常的优越。
扩展阅读:
二、acquireincrement属性详解
c3p0中配置文件的需要配置的属性有很多,我们首先来说一下acquireincrement属性,该属性是设置的数据库连接数,它的默认值是3,我们可以随意的设置该属性的值,在bean.xml文件中配置即可,具体配置信息详见下图:
acquireincrement表示当我们数据库连接池中没有空闲的连接时,它一次性创建的连接数量,我们设置几就一次性创建几个连接,你也可以理解为数据库中的连接都被使用了,没有了连接的时候或者是连接耗尽的时候我们可以一次性的创建n连接,这个n的值由该acquireincrement属性来决定。
扩展阅读:
三、c3p0连接池其它属性配置详解
上图中展示的的属性我们一一来解释,首先,acquireincrement我们在上文中已经详细介绍过了,这里直接略过就不再详细地讲解了。
acquireRetryAttempts这个property属性,它的默认值是30,我们平常配置时一般直接使用默认值就可以了,完全可以不用配置,但是我们本着讲解的角度还是在说一下吧,它主要意思是,如果数据库获取连接时失败,然后再次重复尝试,这个指代的就是就是重复尝试的次数。
acquireRetryDelay属性指的是如果数据库尝试连接失败时下一次连接的间隔时间,它的默认值是一秒钟,单位用毫秒来表述。
autoCommitOnClose属性,从字面意思看就是自动关闭的意思,它的实际意思就是如果数据库连接关闭了之后还没有进行操作的事物全部进行回滚,默认值是false不回滚。
automaticTestTable是一个c3p0中自带的的测试属性,如果设置该属性后c3p0会创建一张名为test的数据表,然后使用默认的配置以及自动装备好的sql语句进行测试数据库的连接。
breakAfterAcquireFailure属性,它的意思是假如获取连接失败了之后,如果该属性设置为true,意思就是说该数据源断开链接,所有的链接都没法再次链接了。
如果设置为false的话,该连接失败后其它的所有等待的连接线程将会抛出异常,但是下次使用的时候还能可以正常尝试获取链接,连接池不会断开,因此该属性一般都会设置为false不会设置为true。
checkoutTimeout意思为检测连接超时时间,如果值为0的话,就说明无限等待不会超时,如果设置了值的话就说明如果连接池中没有新的链接后,就会重新调用getConnection()方法重新创建连接,这个是创建连接时的等待时间。
上图中的这几个属性我相信大家应该都经常用过,也是比较简单和清楚的了,maxPoolSize一看就是最大连接数,连接池中设置的能够允许的最大的连接的数量,默认值是15,我们也可以根据自己的需要随意设置。
maxIdleTime指的是连接池中的最大的空闲时间,默认值是零,我们也可以根据我自己的项目以及自己的并发量设置它的空闲时间。如果设置了为60秒还没被调用使用的话就会被丢弃掉了,为0的话是永久不会被丢弃。
initialPoolSize意思是初始化时的连接数量,默认值就是3,idleConnectionTestPeriod这个值设置的是每隔多长时间应该检查一下连接池中的空闲连接是什么样的,一般会设置为一分钟检查一次。
overrideDefaultUser这个是默认用户,假设我们用连接池持续连接其它的数据源时,我们会用这个属性指定链接用户,当我们调用getconnection方法获取连接对象的时候所指定的用户名是哪一个。overrideDefaultPassword指的是跟上一个属性的用户名所对应的其用户密码。
propertyCycle这个属性跟系统配置有关,假如我们修改了系统配置之后,参数也随之调整,该属性的等待时间是300秒,这个一般也不需要配置,使用默认值即可。
testConnectionOnCheckout该属性的意思是测试连接的性能,当我们设置为true的时候,每次或提交连接的时候都要检测其是否是可用,不过一般该属性设置为false,因为每次都检测有效性非常消耗性能的,而testConnectionOnCheckin属性是检测获取连接时的有效性,跟上一个属性用法一致。
四、spring框架与Hibernate框架中应用c3p0连接池
讲了这么多,我们都是在一一的叙述c3p0中单个属性具体的作用与用法,我们并没有在实际的项目中或者在实际的框架中应用c3p0连接池,下面我们就在Java中最常用的spring框架中整合一下C3P0,让大家了解一下spring框架如何与c3p0连接池完美整合。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134708.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...