mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
@@ -125,15 +125,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
|
||||
public synchronized void init(DataSourceProxy dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
|
||||
ConcurrentMap<String, JdbcDataSourceStat> dataSourceStats = JdbcStatManager.getInstance().getDataSources();
|
||||
|
||||
String url = dataSource.getUrl();
|
||||
JdbcDataSourceStat stat = dataSourceStats.get(url);
|
||||
if (stat == null) {
|
||||
dataSourceStats.putIfAbsent(url, new JdbcDataSourceStat(dataSource.getName(), url));
|
||||
stat = dataSourceStats.get(url);
|
||||
}
|
||||
this.dataSourceStat = stat;
|
||||
this.dataSourceStat = dataSource.getDataSourceStat();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -142,10 +134,6 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
|
||||
return;
|
||||
}
|
||||
|
||||
ConcurrentMap<String, JdbcDataSourceStat> dataSourceStats = JdbcStatManager.getInstance().getDataSources();
|
||||
String url = dataSource.getUrl();
|
||||
dataSourceStats.remove(url);
|
||||
|
||||
dataSource = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ import com.alibaba.druid.proxy.DruidDriver;
|
||||
import com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig;
|
||||
import com.alibaba.druid.proxy.jdbc.TransactionInfo;
|
||||
import com.alibaba.druid.stat.DruidDataSourceStatManager;
|
||||
import com.alibaba.druid.stat.JdbcDataSourceStat;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
/**
|
||||
@@ -108,6 +109,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
|
||||
private boolean closed = false;
|
||||
|
||||
private JdbcDataSourceStat dataSourceStat;
|
||||
|
||||
public DruidDataSource(){
|
||||
}
|
||||
|
||||
@@ -324,6 +327,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
} else if (realDriverClassName.equals("com.alibaba.druid.mock.MockDriver")) {
|
||||
this.exceptionSorter = new MockExceptionSorter();
|
||||
}
|
||||
|
||||
dataSourceStat = new JdbcDataSourceStat(this.name, this.jdbcUrl);
|
||||
|
||||
for (Filter filter : filters) {
|
||||
filter.init(this);
|
||||
@@ -1359,4 +1364,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JdbcDataSourceStat getDataSourceStat() {
|
||||
return dataSourceStat;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.alibaba.druid.pool.ha.config.ConfigLoader;
|
||||
import com.alibaba.druid.pool.ha.valid.DataSourceFailureDetecter;
|
||||
import com.alibaba.druid.pool.ha.valid.DefaultDataSourceFailureDetecter;
|
||||
import com.alibaba.druid.proxy.jdbc.DataSourceProxy;
|
||||
import com.alibaba.druid.stat.JdbcDataSourceStat;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
public class MultiDataSource extends DataSourceAdapter implements MultiDataSourceMBean, DataSourceProxy {
|
||||
@@ -83,6 +84,8 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc
|
||||
|
||||
private Balancer balancer = new WeightBalancer();
|
||||
|
||||
private JdbcDataSourceStat dataSourceStat;
|
||||
|
||||
public long getMaxWaitMillis() {
|
||||
return maxWaitMillis;
|
||||
}
|
||||
@@ -168,9 +171,11 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc
|
||||
if (inited) {
|
||||
return;
|
||||
}
|
||||
|
||||
dataSourceStat = new JdbcDataSourceStat(name, null);
|
||||
|
||||
this.balancer.init(this);
|
||||
|
||||
|
||||
initInternal();
|
||||
|
||||
scheduler = Executors.newScheduledThreadPool(schedulerThreadCount);
|
||||
@@ -323,7 +328,7 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc
|
||||
if (!this.balancer.isInited()) {
|
||||
this.balancer.init(this);
|
||||
}
|
||||
|
||||
|
||||
this.balancer.afterDataSourceChanged(null);
|
||||
}
|
||||
|
||||
@@ -491,4 +496,9 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public JdbcDataSourceStat getDataSourceStat() {
|
||||
return dataSourceStat;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,11 +19,13 @@ import java.sql.Driver;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.filter.Filter;
|
||||
import com.alibaba.druid.stat.JdbcDataSourceStat;
|
||||
|
||||
/**
|
||||
* @author wenshao<szujobs@hotmail.com>
|
||||
*/
|
||||
public interface DataSourceProxy {
|
||||
JdbcDataSourceStat getDataSourceStat();
|
||||
|
||||
String getName();
|
||||
|
||||
|
||||
@@ -60,11 +60,14 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl
|
||||
private final AtomicLong resultSetIdSeed = new AtomicLong(50000);
|
||||
private final AtomicLong transactionIdSeed = new AtomicLong(0);
|
||||
|
||||
private final JdbcDataSourceStat dataSourceStat;
|
||||
|
||||
public DataSourceProxyImpl(Driver rawDriver, DataSourceProxyConfig config){
|
||||
super();
|
||||
this.rawDriver = rawDriver;
|
||||
this.config = config;
|
||||
this.dbType = JdbcUtils.getDbType(config.getRawUrl(), config.getRawDriverClassName());
|
||||
this.dataSourceStat = new JdbcDataSourceStat(config.getName(), config.getUrl());
|
||||
}
|
||||
|
||||
public String getDbType() {
|
||||
@@ -370,4 +373,9 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl
|
||||
public long createTransactionId() {
|
||||
return transactionIdSeed.getAndIncrement();
|
||||
}
|
||||
|
||||
public JdbcDataSourceStat getDataSourceStat() {
|
||||
return dataSourceStat;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.alibaba.druid.stat;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
@@ -47,8 +46,6 @@ public class JdbcStatManager implements JdbcStatManagerMBean {
|
||||
private final JdbcResultSetStat resultSetStat = new JdbcResultSetStat();
|
||||
private final JdbcStatementStat statementStat = new JdbcStatementStat();
|
||||
|
||||
private final ConcurrentMap<String, JdbcDataSourceStat> dataSources = new ConcurrentHashMap<String, JdbcDataSourceStat>();
|
||||
|
||||
private final AtomicLong resetCount = new AtomicLong();
|
||||
|
||||
public final ThreadLocal<JdbcStatContext> contextLocal = new ThreadLocal<JdbcStatContext>();
|
||||
@@ -57,10 +54,6 @@ public class JdbcStatManager implements JdbcStatManagerMBean {
|
||||
|
||||
}
|
||||
|
||||
public ConcurrentMap<String, JdbcDataSourceStat> getDataSources() {
|
||||
return dataSources;
|
||||
}
|
||||
|
||||
public JdbcStatContext getStatContext() {
|
||||
return contextLocal.get();
|
||||
}
|
||||
@@ -305,8 +298,17 @@ public class JdbcStatManager implements JdbcStatManagerMBean {
|
||||
TabularType tabularType = new TabularType("SqlListStatistic", "SqlListStatistic", rowType, indexNames);
|
||||
TabularData data = new TabularDataSupport(tabularType);
|
||||
|
||||
for (JdbcDataSourceStat dataSource : dataSources.values()) {
|
||||
Map<String, JdbcSqlStat> statMap = dataSource.getSqlStatMap();
|
||||
for (DataSourceProxyImpl dataSource : DruidDriver.getProxyDataSources().values()) {
|
||||
Map<String, JdbcSqlStat> statMap = dataSource.getDataSourceStat().getSqlStatMap();
|
||||
for (Map.Entry<String, JdbcSqlStat> entry : statMap.entrySet()) {
|
||||
Map<String, Object> map = entry.getValue().getData();
|
||||
map.put("URL", dataSource.getUrl());
|
||||
data.put(new CompositeDataSupport(JdbcSqlStat.getCompositeType(), map));
|
||||
}
|
||||
}
|
||||
|
||||
for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) {
|
||||
Map<String, JdbcSqlStat> statMap = dataSource.getDataSourceStat().getSqlStatMap();
|
||||
for (Map.Entry<String, JdbcSqlStat> entry : statMap.entrySet()) {
|
||||
Map<String, Object> map = entry.getValue().getData();
|
||||
map.put("URL", dataSource.getUrl());
|
||||
|
||||
@@ -43,8 +43,9 @@ public class DruidDataSourceFilterTest extends TestCase {
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
dataSource.init();
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
JdbcDataSourceStat dataSourceStat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
JdbcDataSourceStat dataSourceStat =dataSource.getDataSourceStat();
|
||||
// Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
// JdbcDataSourceStat dataSourceStat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
|
||||
Assert.assertEquals(0, dataSourceStat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
|
||||
@@ -31,10 +31,7 @@ public class ParamTest extends TestCase {
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
dataSource.init();
|
||||
Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
JdbcDataSourceStat stat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
JdbcDataSourceStat stat =dataSource.getDataSourceStat();
|
||||
|
||||
Assert.assertEquals(0, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
@@ -54,7 +51,7 @@ public class ParamTest extends TestCase {
|
||||
|
||||
dataSource.close();
|
||||
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size());
|
||||
// Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getCloseCount());
|
||||
@@ -79,8 +76,8 @@ public class ParamTest extends TestCase {
|
||||
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size());
|
||||
// Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
// Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
|
||||
@@ -109,11 +106,8 @@ public class ParamTest extends TestCase {
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
dataSource.init();
|
||||
Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
JdbcDataSourceStat stat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
|
||||
JdbcDataSourceStat stat =dataSource.getDataSourceStat();
|
||||
|
||||
Assert.assertEquals(10, stat.getConnectionStat().getConnectCount());
|
||||
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
|
||||
Reference in New Issue
Block a user