c3p0连接池,当数据源不可用时 自动跳过

最近在一个项目中出现一个问题:

系统使用spring+c3p0管理数据库的连接池,项目中一共用到了4个数据源。在启动项目时,如果其中有某一个或几个数据源连不上时,后台就会无限次尝试连接,导致整项目无法启动。


而实际上,我们想要的结果是,如果某个数据源无法连接使用时,跳过该数据源的连接,继续加载下面的项目。于是查了一下c3p0连接池配置,发现经过如下配置后即可达到理想的效果。

在数据源配置时,加上如下三项内容:

<property name="breakAfterAcquireFailure" value="true" />
<property name="checkoutTimeout" value="100"/>
<property name="acquireRetryAttempts" value="0"/>

其中:

  • checkoutTimeout:当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出 SQLException,如设为0则无限期等待。单位毫秒。Default: 0 
  • breakAfterAcquireFailure :true表示pool向数据库请求连接失败后标记整个pool为block并close,就算后端数据库恢复正常也不进行重连,客户端对pool的请求都拒绝掉。false表示不会标记 pool为block,新的请求都会尝试去数据库请求connection。默认为false。因此,如果想让数据库和网络故障恢复之后,pool能继续请求正常资源必须把此项配置设为false
  • acquireRetryAttempts:定义在从数据库获取新连接失败后重复尝试的次数。Default: 30

最后,一个完整的数据源配置如下:

<bean id="iamsDB" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${iamsDB.driverClass}" />
        <property name="jdbcUrl" value="${iamsDB.url}" />
        <property name="user" value="${iamsDB.user}" />
        <property name="password" value="${iamsDB.password}" />
        <property name="maxPoolSize" value="${iamsDB.maxPoolSize}" />
        <property name="minPoolSize" value="${iamsDB.minPoolSize}" />
        <property name="maxIdleTime" value="${iamsDB.maxIdleTime}" />
        <property name="initialPoolSize" value="${iamsDB.initialPoolSize}" />
        <property name="acquireIncrement" value="${iamsDB.acquireIncrement}" />
        <property name="maxStatements" value="${iamsDB.maxStatements}" />
        <property name="idleConnectionTestPeriod" value="${iamsDB.idleConnectionTestPeriod}" />
        <property name="acquireRetryAttempts" value="${iamsDB.acquireRetryAttempts}" />
        <property name="breakAfterAcquireFailure" value="true" />
        <property name="checkoutTimeout" value="100"/>
        <property name="acquireRetryAttempts" value="0"/>
    </bean>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值