解决spring+c3p0数据库连接一直增加的问题
- 问题描述
- spring+c3p0的配置
- 针对不同情况的解决方案
问题描述:
SSH框架,hibernate的配置由spring接管,数据源的配置放在spring的配置文件中,当数据源不配置数据库连接池时,数据库的连接处于正常状态,中规中矩地每次需要了建立连接,用完了释放连接,没有任何资源复用的概念。访问量小的时候问题不大,访问量大的时候问题就来了,1000个用户重复了1000个建立连接和释放连接的动作,显而易见的极大资源浪费,连接池的基本目的即在此处,把建立好的连接进行复用,节省资源的同时也一定程度提高用户访问速度,因为对数据库的操作不用每次重新建立连接了。可是当引入c3p0数据库连接池之后发现,每一个接口的访问都会增加一定数量的数据库连接,在数据库命令窗口用root用户登录,使用show processlist;命令查看连接数,数量随着接口的访问持续增加,并且在接口访问结束之后几乎不会有连接释放,等待多久连接数依旧。
贴一下applicationContext.xml文件中的配置代码:
数据源配置:
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" >
<property name="driverClass"
value="com.mysql.jdbc.Driver">
</property>
<property name="jdbcUrl"
value="jdbc:mysql://xx.xx.xx.xx:3306/icheck_sziit">
</property>
<property name="user" value="xxx"></property>
<property name="password" value="xxx"></property>
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize"><value>5</value></property>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize"><value>30</value></property>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize"><value>10</value></property>
<!--最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime"><value>20</value></property>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name=