druid源码分析—DruidDataSource的基本分析(二)
getConnectionInternal基本分析
DruidDataSource 参数记录
private int activeCount = 0;
private int poolingCount = 0;
private long connectCount = 0L;
private int activePeak = 0;
private long activePeakTime = 0;
private volatile boolean closed = false;
private volatile boolean enable = true;
private volatile DataSourceDisableException disableException = null;
protected volatile int maxWaitThreadCount = -1;
private volatile DruidConnectionHolder[] connections;
protected static final AtomicLongFieldUpdater<DruidDataSource> connectErrorCountUpdater
= AtomicLongFieldUpdater.newUpdater(DruidDataSource.class, "connectErrorCount");
DruidAbstractDataSource 参数记录
public final static int DEFAULT_MAX_ACTIVE_SIZE = 8;
protected volatile boolean onFatalError = false;
protected volatile int onFatalErrorMaxActive = 0;
protected volatile int maxActive = DEFAULT_MAX_ACTIVE_SIZE;
protected ScheduledExecutorService createScheduler;
代码分析
private DruidPooledConnection getConnectionInternal(long maxWait) throws SQLException {
if (closed) {
connectErrorCountUpdater.incrementAndGet(this);
throw new DataSourceClosedException("dataSource already closed at " + new Date(closeTimeMillis));
}
if (!enable) {
connectErrorCountUpdater.incrementAndGet(this);
if (disableException != null) {
throw disableException;
}
throw new DataSourceDisableException();
}
final long nanos = TimeUnit.MILLISECONDS.toNanos(maxWait);
final int maxWaitThreadCount = this.maxWaitThreadCount;
DruidConnectionHolder holder;
for (boolean createDirect