书接上文,异步创建连接需要设置参数,如果不设置参数,使用默认配置,会进到同步创建连接的分支。
if (createScheduler != null && asyncInit) {
// 异步
for (int i = 0; i < initialSize; ++i) {
submitCreateTask(true);
}
} else if (!asyncInit) {
// 同步
// init connections
while (poolingCount < initialSize) {
try {
PhysicalConnectionInfo pyConnectInfo = createPhysicalConnection();
DruidConnectionHolder holder = new DruidConnectionHolder(this, pyConnectInfo);
connections[poolingCount++] = holder;
} catch (SQLException ex) {
LOG.error("init datasource error, url: " + this.getUrl(), ex);
if (initExceptionThrow) {
connectError = ex;
break;
} else {
Thread.sleep(3000);
}
}
}
if (poolingCount > 0) {
poolingPeak = poolingCount;
poolingPeakTime = System.currentTimeMillis();

本文解析了异步和同步创建Druid连接池的实现细节,介绍了两者在初始化过程中的不同策略,重点在于单线程同步创建的简单流程和多线程异步初始化的并行操作。
最低0.47元/天 解锁文章
1679

被折叠的 条评论
为什么被折叠?



