Druid是我们项目中常见的数据库连接工具,为了保证业务的稳定,我们需要有一个能够尝试重连的连接。而DruidDatasource参数仅通过名字很难确认它具体的工作原理。所以接下来本文将通过源码解读,来分析应该如何配置Druid重连部分的参数。
如下图所示,可以看到,当我们配置好一个DruidDatasource时,其任务会持续尝试创建连接。
在Druid尝试建立物理连接失败且捕获到异常时,errorCount错误次数会增加。在下面的判断条件中有connectionErrorRetryAttempts错误重试次数和timeBetweenConnectErrorMillis错误间隔时间两个我们常用的重试配置参数。通过源码可知,当错误重试次数超过connectionErrorRetryAttempts,并且重试间隔大于0时,
Druid会进入if判断中的逻辑。
如果我们将breakAfterAcquireFailure设置为true,那么当异常失败次数达到connectionErrorRetryAttempts时,Druid将会清除当前建立连接的线程。停止持续重试建立连接。
如果设置breakAfterAcquireFailure为false,Druid连接池会设置一个调度器,在配置的timeBetweenConnectErrorMillis参数后定时重新创建任务,重新尝试建立连接。并且销毁当前线程不再进行重试。
综上所述,我们可以知道有关于数据库连接重试的参数主要有connectionErrorRetryAttempts:连接错误重试次数,timeBetweenConnectErrorMillis:连接错误重试间隔时间,breakAfterAcquireFailure:获取连接失败后是否中断。
当我们需要连接稳定运行时,可以配置breakAfterAcquireFailure为false,并根据自身业务需求和网络环境来配置connectionErrorRetryAttempts,timeBetweenConnectErrorMillis。让其在可控的频次下进行恢复重连。