com.alibaba.druid.pool.ha.balance.LeastConnectionBalancer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of druid Show documentation
Show all versions of druid Show documentation
An JDBC datasource implementation.
package com.alibaba.druid.pool.ha.balance;
import java.sql.SQLException;
import com.alibaba.druid.pool.ha.DataSourceChangedEvent;
import com.alibaba.druid.pool.ha.DataSourceHolder;
import com.alibaba.druid.pool.ha.MultiConnectionHolder;
import com.alibaba.druid.pool.ha.MultiDataSource;
import com.alibaba.druid.pool.ha.MultiDataSourceConnection;
public class LeastConnectionBalancer extends AbstractBalancer {
@Override
public void afterDataSourceChanged(DataSourceChangedEvent event) {
}
@Override
public MultiConnectionHolder getConnection(MultiDataSourceConnection conn, String sql) throws SQLException {
MultiDataSource multiDataSource = conn.getMultiDataSource();
DataSourceHolder dataSource = null;
int leastCount = -1;
for (DataSourceHolder item : multiDataSource.getDataSources().values()) {
if (!item.isEnable()) {
continue;
}
int activeCount = item.getDataSource().getActiveCount();
if (dataSource == null) {
leastCount = activeCount;
dataSource = item;
} else {
if (leastCount > item.getDataSource().getActiveCount()) {
dataSource = item;
leastCount = activeCount;
}
}
}
if (dataSource == null) {
throw new SQLException("can not get real connection, enableDataSourceCount "
+ multiDataSource.getEnabledDataSourceCount());
}
return dataSource.getConnection();
}
}