mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
@@ -59,6 +59,8 @@ import com.alibaba.druid.proxy.jdbc.StatementProxy;
|
||||
public interface Filter {
|
||||
|
||||
void init(DataSourceProxy dataSource);
|
||||
|
||||
void destory();
|
||||
|
||||
ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException;
|
||||
|
||||
|
||||
@@ -67,6 +67,11 @@ public abstract class FilterAdapter extends NotificationBroadcasterSupport imple
|
||||
public void init(DataSourceProxy dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destory() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Array callableStatement_getArray(FilterChain chain, CallableStatementProxy statement, int parameterIndex)
|
||||
|
||||
@@ -123,7 +123,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(DataSourceProxy dataSource) {
|
||||
public synchronized void init(DataSourceProxy dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
|
||||
ConcurrentMap<String, JdbcDataSourceStat> dataSourceStats = JdbcStatManager.getInstance().getDataSources();
|
||||
@@ -136,6 +136,19 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
|
||||
}
|
||||
this.dataSourceStat = stat;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void destory() {
|
||||
if (dataSource == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
ConcurrentMap<String, JdbcDataSourceStat> dataSourceStats = JdbcStatManager.getInstance().getDataSources();
|
||||
String url = dataSource.getUrl();
|
||||
dataSourceStats.remove(url);
|
||||
|
||||
dataSource = null;
|
||||
}
|
||||
|
||||
public ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException {
|
||||
ConnectionProxy connection = null;
|
||||
|
||||
@@ -687,6 +687,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
notEmptySignalCount++;
|
||||
|
||||
this.closed = true;
|
||||
|
||||
for (Filter filter : filters) {
|
||||
filter.destory();
|
||||
}
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
@@ -671,6 +671,10 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
|
||||
public boolean visit(SQLExprTableSource x) {
|
||||
if (isSimpleExprTableSource(x)) {
|
||||
String ident = x.getExpr().toString();
|
||||
|
||||
if (variants.containsKey(ident)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (subQueryMap.containsKey(ident)) {
|
||||
return false;
|
||||
|
||||
@@ -391,7 +391,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
|
||||
|
||||
// 25 -
|
||||
new ArrayType<Long>(SimpleType.LONG, true), //
|
||||
new ArrayType<Long>(SimpleType.STRING, true), //
|
||||
new ArrayType<String>(SimpleType.STRING, false), //
|
||||
};
|
||||
|
||||
String[] indexNames = {
|
||||
@@ -490,6 +490,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean {
|
||||
map.put("InTransactionCount", getInTransactionCount());
|
||||
|
||||
map.put("Histogram", this.histogram.toArray());
|
||||
|
||||
map.put("LastSlowParameters", lastSlowParameters);
|
||||
|
||||
return map;
|
||||
|
||||
@@ -7,6 +7,7 @@ import junit.framework.TestCase;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.stat.DruidDataSourceStatManager;
|
||||
import com.alibaba.druid.stat.JdbcDataSourceStat;
|
||||
import com.alibaba.druid.stat.JdbcStatManager;
|
||||
|
||||
public class DruidDataSourceFilterTest extends TestCase {
|
||||
@@ -52,20 +53,24 @@ public class DruidDataSourceFilterTest extends TestCase {
|
||||
dataSource.setFilters("stat");
|
||||
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
dataSource.init();
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
JdbcDataSourceStat dataSourceStat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, dataSourceStat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount());
|
||||
Assert.assertEquals(1, dataSourceStat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(0, dataSourceStat.getConnectionStat().getCloseCount());
|
||||
|
||||
conn.close();
|
||||
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount()); // logic
|
||||
Assert.assertEquals(1, dataSourceStat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(0, dataSourceStat.getConnectionStat().getCloseCount()); // logic
|
||||
// close不会导致计数器+1
|
||||
}
|
||||
|
||||
@@ -73,7 +78,7 @@ public class DruidDataSourceFilterTest extends TestCase {
|
||||
|
||||
dataSource.close();
|
||||
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getCloseCount());
|
||||
Assert.assertEquals(1, dataSourceStat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, dataSourceStat.getConnectionStat().getCloseCount());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import junit.framework.TestCase;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.stat.DruidDataSourceStatManager;
|
||||
import com.alibaba.druid.stat.JdbcDataSourceStat;
|
||||
import com.alibaba.druid.stat.JdbcStatManager;
|
||||
|
||||
public class ParamTest extends TestCase {
|
||||
@@ -29,31 +30,39 @@ public class ParamTest extends TestCase {
|
||||
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
dataSource.init();
|
||||
Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
JdbcDataSourceStat stat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
|
||||
Assert.assertEquals(0, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
Connection conn = dataSource.getConnection();
|
||||
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount());
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(0, stat.getConnectionStat().getCloseCount());
|
||||
|
||||
conn.close();
|
||||
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount()); // logic
|
||||
// close不会导致计数器+1
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(0, stat.getConnectionStat().getCloseCount()); // logic
|
||||
// close不会导致计数器+1
|
||||
}
|
||||
|
||||
dataSource.close();
|
||||
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getCloseCount());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getCloseCount());
|
||||
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount());
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getConnectCount());
|
||||
Assert.assertEquals(1, stat.getConnectionStat().getCloseCount());
|
||||
}
|
||||
|
||||
public void test_zero() throws Exception {
|
||||
@@ -70,7 +79,9 @@ public class ParamTest extends TestCase {
|
||||
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
|
||||
Exception error = null;
|
||||
@@ -96,15 +107,21 @@ public class ParamTest extends TestCase {
|
||||
Assert.assertEquals(1, dataSource.getProxyFilters().size());
|
||||
|
||||
JdbcStatManager.getInstance().reset();
|
||||
|
||||
dataSource.init();
|
||||
Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size());
|
||||
Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size());
|
||||
|
||||
Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
JdbcDataSourceStat stat = JdbcStatManager.getInstance().getDataSources().values().iterator().next();
|
||||
|
||||
Assert.assertEquals(10, stat.getConnectionStat().getConnectCount());
|
||||
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
Connection conn = dataSource.getConnection();
|
||||
conn.close();
|
||||
}
|
||||
|
||||
Assert.assertEquals(10, JdbcStatManager.getInstance().getConnectionstat().getConnectCount());
|
||||
Assert.assertEquals(10, stat.getConnectionStat().getConnectCount());
|
||||
|
||||
dataSource.close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user