diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 07b32a8ad2..a94077b7bf 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -493,6 +493,10 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements public String getDbType() { return dbType; } + + public void setDbType(String dbType) { + this.dbType = dbType; + } public void addConnectionProperty(String name, String value) { if (inited) { diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index e3e00bf0ea..24a144ec1b 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -291,8 +291,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } - this.dbType = JdbcUtils.getDbType(jdbcUrl, driverClass.getClass().getName()); - + if (this.dbType == null || this.dbType.length() == 0) { + this.dbType = JdbcUtils.getDbType(jdbcUrl, driverClass.getClass().getName()); + } + if ("oracle".equals(this.dbType)) { isOracle = true; diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index 317baff139..abad1d349e 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -40,30 +40,28 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { public void init(DataSourceProxy dataSource) { this.dataSource = dataSource; - String dbType = this.dbType; - if (this.dbType == null || this.dbType.trim().length() == 0) { this.dbType = dataSource.getDbType(); } if (JdbcUtils.MYSQL.equals(dbType)) { - provider = new MySqlWallProvider(config); - if (config == null) { config = new WallConfig(MySqlWallProvider.DEFAULT_CONFIG_DIR); } + + provider = new MySqlWallProvider(config); } else if (JdbcUtils.ORACLE.equals(dbType)) { - provider = new OracleWallProvider(config); - if (config == null) { config = new WallConfig(OracleWallProvider.DEFAULT_CONFIG_DIR); } + + provider = new OracleWallProvider(config); } else if (JdbcUtils.SQL_SERVER.equals(dbType)) { - provider = new SQLServerProvider(config); - if (config == null) { config = new WallConfig(SQLServerProvider.DEFAULT_CONFIG_DIR); } + + provider = new SQLServerProvider(config); } else { throw new IllegalStateException("dbType not support : " + dbType); } diff --git a/src/test/java/com/alibaba/druid/pool/TestMockPerf.java b/src/test/java/com/alibaba/druid/pool/TestMockPerf.java index e651df9f58..2e1918e856 100644 --- a/src/test/java/com/alibaba/druid/pool/TestMockPerf.java +++ b/src/test/java/com/alibaba/druid/pool/TestMockPerf.java @@ -1,6 +1,7 @@ package com.alibaba.druid.pool; import java.sql.Connection; +import java.sql.Statement; import junit.framework.TestCase; @@ -14,6 +15,8 @@ public class TestMockPerf extends TestCase { dataSource.setInitialSize(3); dataSource.setMinIdle(3); dataSource.setMaxActive(20); + dataSource.setDbType("mysql"); + dataSource.setFilters("stat,wall"); dataSource.init(); } @@ -29,6 +32,9 @@ public class TestMockPerf extends TestCase { public void perf() throws Exception { for (int i = 0; i < 1000 * 1000; ++i) { Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + stmt.execute("SELECT 1"); + stmt.close(); conn.close(); } }