当数据库关闭是C3p0会做什么操作?

JamesJiangCHN 发布于 2012/06/30 13:10
阅读 792
收藏 0

项目使用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>

加载中
0
匆匆里
匆匆里
连接池会隔断时间检查一下数据库连接是否正常,你关闭数据库连接池是不知道的,只有等到他检查的时候才会知道 <!--最大空闲时间,30秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->你配置了这个三十秒,也就是说在没有服务调用数据库时最少30秒才会调用conn.close()这时才会报异常, breakAfterAcquireFailure false 第一次不会引起数据源关闭,第二个30秒关闭conn时又报错所以数据源声音永久关闭,你注释已经写的很明白了
JamesJiangCHN
JamesJiangCHN
谢谢指导,那我要是重新连接是不是会重新新建连接,继续等待,怎么可以阻止这种情况的发生呢?
0
匆匆里
匆匆里
你可以尝试在一分钟内将数据库重启,看看会不会连接失败,验证一下就知道了
返回顶部
顶部