diff --git a/src/main/java/com/alibaba/druid/filter/stat/MergeSqlStatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/MergeSqlStatFilter.java deleted file mode 100644 index 0f344fb32a..0000000000 --- a/src/main/java/com/alibaba/druid/filter/stat/MergeSqlStatFilter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.alibaba.druid.filter.stat; - -import com.alibaba.druid.logging.Log; -import com.alibaba.druid.logging.LogFactory; -import com.alibaba.druid.proxy.jdbc.DataSourceProxy; -import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; -import com.alibaba.druid.stat.JdbcSqlStat; - -public class MergeSqlStatFilter extends StatFilter { - - private final static Log LOG = LogFactory.getLog(MergeSqlStatFilter.class); - - private String dbType; - - public String getDbType() { - return dbType; - } - - public void setDbType(String dbType) { - this.dbType = dbType; - } - - @Override - public void init(DataSourceProxy dataSource) { - super.init(dataSource); - - if (this.dbType == null || this.dbType.trim().length() == 0) { - this.dbType = dataSource.getDbType(); - } - } - - public JdbcSqlStat getSqlStat(String sql) { - try { - sql = ParameterizedOutputVisitorUtils.parameterize(sql, sql); - } catch (Exception e) { - LOG.error("merge sql error", e); - } - return dataSourceStat.getSqlStat(sql); - } -} diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 00415264e6..177a0f907c 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -42,6 +42,7 @@ import com.alibaba.druid.proxy.jdbc.JdbcParameter; import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy; import com.alibaba.druid.proxy.jdbc.ResultSetProxy; import com.alibaba.druid.proxy.jdbc.StatementProxy; +import com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils; import com.alibaba.druid.stat.JdbcConnectionStat; import com.alibaba.druid.stat.JdbcDataSourceStat; import com.alibaba.druid.stat.JdbcResultSetStat; @@ -77,9 +78,21 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { // 3 seconds is slow sql protected long slowSqlMillis = 3 * 1000; + private String dbType; + + private boolean mergeSql = false; + public StatFilter(){ } + public String getDbType() { + return dbType; + } + + public void setDbType(String dbType) { + this.dbType = dbType; + } + public boolean isConnectionStackTraceEnable() { return connectionStackTraceEnable; } @@ -102,11 +115,67 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { return resetCount.get(); } + public boolean isMergeSql() { + return mergeSql; + } + + public void setMergeSql(boolean mergeSql) { + this.mergeSql = mergeSql; + } + + public String mergeSql(String sql) { + if (!mergeSql) { + return sql; + } + + try { + sql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + } catch (Exception e) { + LOG.error("merge sql error", e); + } + + return sql; + } + @Override public synchronized void init(DataSourceProxy dataSource) { this.dataSource = dataSource; this.dataSourceStat = dataSource.getDataSourceStat(); + + if (this.dbType == null || this.dbType.trim().length() == 0) { + this.dbType = dataSource.getDbType(); + } + + initFromProperties(dataSource.getConnectProperties()); + initFromProperties(System.getProperties()); + } + + private void initFromProperties(Properties properties) { + if (properties == null) { + return; + } + + { + String property = properties.getProperty("druid.stat.mergeSql"); + if ("true".equals(property)) { + this.mergeSql = true; + } else if ("false".equals(property)) { + this.mergeSql = false; + } + } + + { + String property = properties.getProperty("druid.stat.slowSqlMillis"); + if (property != null && property.trim().length() > 0) { + property = property.trim(); + try { + this.slowSqlMillis = Long.parseLong(property); + } catch (Exception e) { + LOG.error("property 'druid.stat.slowSqlMillis' format error"); + } + } + } } @Override diff --git a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java index 4725b44cb0..dcccb6c6cf 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java @@ -86,6 +86,8 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc private JdbcDataSourceStat dataSourceStat; + protected Properties connectionProperties = new Properties(); + public long getMaxWaitMillis() { return maxWaitMillis; } @@ -171,7 +173,7 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc if (inited) { return; } - + dataSourceStat = new JdbcDataSourceStat(name, null); this.balancer.init(this); @@ -501,4 +503,10 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc public JdbcDataSourceStat getDataSourceStat() { return dataSourceStat; } + + @Override + public Properties getConnectProperties() { + return connectionProperties; + } + } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java index 5f4b09123c..960763c774 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java @@ -17,6 +17,7 @@ package com.alibaba.druid.proxy.jdbc; import java.sql.Driver; import java.util.List; +import java.util.Properties; import com.alibaba.druid.filter.Filter; import com.alibaba.druid.stat.JdbcDataSourceStat; @@ -25,6 +26,7 @@ import com.alibaba.druid.stat.JdbcDataSourceStat; * @author wenshao */ public interface DataSourceProxy { + JdbcDataSourceStat getDataSourceStat(); String getName(); @@ -46,4 +48,6 @@ public interface DataSourceProxy { long createResultSetId(); long createTransactionId(); + + Properties getConnectProperties(); } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java index c99479f947..4cb9bcc901 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java @@ -183,6 +183,10 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl return properties.toString(); } + public Properties getConnectProperties() { + return properties; + } + public CompositeDataSupport getCompositeData() throws JMException { StatFilter statFilter = null; JdbcDataSourceStat stat = null;