diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index e3ce524ff2..3f083813e8 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -471,8 +471,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat initExceptionSorter(); initValidConnectionChecker(); - if (useGloalDataSourceStat) { + if (isUseGloalDataSourceStat()) { dataSourceStat = JdbcDataSourceStat.getGlobal(); + if (dataSourceStat.getDbType() == null) { + dataSourceStat.setDbType(this.getDbType()); + } if (dataSourceStat == null) { dataSourceStat = new JdbcDataSourceStat("Global", "Global", this.dbType); JdbcDataSourceStat.setGlobal(dataSourceStat); diff --git a/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java b/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java index 2b0f07d348..b678a837e1 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java @@ -113,6 +113,14 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean { sqlStatMap = new LRUCache(maxSize, 16, 0.75f, false); } + + public String getDbType() { + return dbType; + } + + public void setDbType(String dbType) { + this.dbType = dbType; + } public void reset() { blobOpenCount.set(0); @@ -266,6 +274,7 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean { if (sqlStat == null) { sqlStat = new JdbcSqlStat(sql); sqlStat.setDbType(this.dbType); + sqlStat.setName(this.name); sqlStatMap.put(sql, sqlStat); } diff --git a/src/test/java/com/alibaba/druid/bvt/proxy/filter/GlobalStatTest0.java b/src/test/java/com/alibaba/druid/bvt/proxy/filter/GlobalStatTest0.java index 4ec5a7a824..226dd4fa39 100644 --- a/src/test/java/com/alibaba/druid/bvt/proxy/filter/GlobalStatTest0.java +++ b/src/test/java/com/alibaba/druid/bvt/proxy/filter/GlobalStatTest0.java @@ -3,14 +3,18 @@ package com.alibaba.druid.bvt.proxy.filter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; - -import org.junit.Assert; +import java.util.List; +import java.util.Map; import junit.framework.TestCase; +import org.junit.Assert; + import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.stat.JdbcDataSourceStat; import com.alibaba.druid.stat.JdbcStatManager; +import com.alibaba.druid.support.json.JSONUtils; +import com.alibaba.druid.util.JdbcConstants; import com.alibaba.druid.util.JdbcUtils; public class GlobalStatTest0 extends TestCase { @@ -41,6 +45,7 @@ public class GlobalStatTest0 extends TestCase { Assert.assertEquals(0, JdbcStatManager.getInstance().getSqlList().size()); } + @SuppressWarnings("unchecked") public void test_execute() throws Exception { { Connection conn = dataSourceA.getConnection(); @@ -69,6 +74,12 @@ public class GlobalStatTest0 extends TestCase { Assert.assertSame(JdbcDataSourceStat.getGlobal(), dataSourceB.getDataSourceStat()); Assert.assertEquals(1, JdbcStatManager.getInstance().getSqlList().size()); + String json = JSONUtils.toJSONString(JdbcStatManager.getInstance().getSqlList()); + List> sqlList = (List>) JSONUtils.parse(json); + Map sqlInfo = sqlList.get(0); + Assert.assertEquals(JdbcConstants.MOCK, sqlInfo.get("DbType")); + Assert.assertEquals(2, sqlInfo.get("ExecuteCount")); + Assert.assertEquals(2, sqlInfo.get("FetchRowCount")); } }