当数据库关闭是C3p0会做什么操作?
项目使用spring ibatis开发的,C3p0作连接池。
当数据库关闭,即停止运行是,代码存储是抛出异常要1分钟左右。
请问这一分钟是卡在什么地方,是C3p0数据库引起的么,是什么样的操作?
从C3p0中取连接,存储?不能用再换一个?
请各位明示,多谢。
C3p0配置如下
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>${jdbc1.driver}</value> </property> <property name="jdbcUrl"> <value>${jdbc1.url}</value> </property> <property name="user"> <value>${jdbc1.username}</value> </property> <property name="password"> <value>${jdbc1.password}</value> </property> <!-- 最小连接数 --> <property name="minPoolSize"> <value>5</value> </property> <!-- 最大连接数 --> <property name="maxPoolSize"> <value>500</value> </property> <!-- 初始化连接数 --> <property name="initialPoolSize"> <value>5</value> </property> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement"> <value>5</value> </property> <!--连接关闭时默认将所有未提交的操作回滚。Default: false --> <property name="autoCommitOnClose"> <value>false</value> </property> <!--最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime"> <value>30</value> </property> <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试 获取连接失败后该数据源将申明已断开并永久关闭。Default: false --> <property name="breakAfterAcquireFailure"> <value>false</value> </property> </bean>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你可以尝试在一分钟内将数据库重启,看看会不会连接失败,验证一下就知道了
谢谢指导,那我要是重新连接是不是会重新新建连接,继续等待,怎么可以阻止这种情况的发生呢?
连接池会隔断时间检查一下数据库连接是否正常,你关闭数据库连接池是不知道的,只有等到他检查的时候才会知道
<!--最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->你配置了这个三十秒,也就是说在没有服务调用数据库时最少30秒才会调用conn.close()这时才会报异常,
breakAfterAcquireFailure false 第一次不会引起数据源关闭,第二个30秒关闭conn时又报错所以数据源声音永久关闭,你注释已经写的很明白了