diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 57417b4a69..b1611fc348 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -431,8 +431,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat public void close() { lock.lock(); try { - createConnectionThread.interrupt(); - destoryConnectionThread.interrupt(); + if (createConnectionThread != null) { + createConnectionThread.interrupt(); + } + + if (destoryConnectionThread != null) { + destoryConnectionThread.interrupt(); + } for (int i = 0; i < count; ++i) { try { @@ -502,12 +507,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat connections[lastIndex] = null; count--; -// if (count <= minIdle - 1) { -// lowWater.signal(); -// } -// if (count == 0) { -// lowWater.signal(); -// } + // if (count <= minIdle - 1) { + // lowWater.signal(); + // } + // if (count == 0) { + // lowWater.signal(); + // } return last; } @@ -547,9 +552,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat connections[lastIndex] = null; count--; -// if (lastIndex == minIdle - 1) { -// lowWater.signal(); -// } + // if (lastIndex == minIdle - 1) { + // lowWater.signal(); + // } if (count == 0) { lowWater.signal(); } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/Case3.java b/src/test/java/com/alibaba/druid/bvt/pool/Case3.java new file mode 100644 index 0000000000..b9f64e58db --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/Case3.java @@ -0,0 +1,33 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; + +public class Case3 extends TestCase { + + public void test_0() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setPoolPreparedStatements(true); + dataSource.close(); + } + + public void test_1() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:xxx"); + + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT 1"); + rs.next(); + + conn.close(); + + dataSource.close(); + } +} diff --git a/src/test/java/com/alibaba/druid/pool/DruidTest.java b/src/test/java/com/alibaba/druid/pool/DruidTest.java new file mode 100644 index 0000000000..e7a04dfd2f --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/DruidTest.java @@ -0,0 +1,109 @@ +package com.alibaba.druid.pool; + +import java.io.FileWriter; +import java.io.IOException; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Date; + +import com.alibaba.druid.pool.DruidDataSource; + +public class DruidTest { + + private static DruidDataSource DS; + + public DruidTest(String connectURI) { + initDS(connectURI); + } + + public DruidTest(String connectURI, String username, String pswd, + String driverClass, int initialSize, int maxActive, int maxIdle, + int minIdle, int maxWait) { + initDS(connectURI, username, pswd, driverClass, initialSize, maxActive, + minIdle, maxIdle, maxWait); + } + + public Connection getConn() { + Connection con = null; + if (DS != null) { + try { + con = DS.getConnection(); + } catch (Exception e) { + e.printStackTrace(System.err); + } + + try { + con.setAutoCommit(false); + } catch (SQLException e) { + e.printStackTrace(); + } + return con; + } + return con; + } + + public static void initDS(String connectURI, String username, String pswd, + String driverClass, int initialSize, int maxActive, int maxIdle, + int minIdle, int maxWait) { + DruidDataSource ds = new DruidDataSource(); + ds.setDriverClassName(driverClass); + ds.setUsername(username); + ds.setPassword(pswd); + ds.setUrl(connectURI); + ds.setInitialSize(initialSize); // 初始的连接数; + ds.setMaxActive(maxActive); + ds.setMaxIdle(maxIdle); + ds.setMinIdle(minIdle); + ds.setMaxWait(maxWait); + DS = ds; + } + + public static void initDS(String connectURI) { + initDS(connectURI, "root", "12345", "com.mysql.jdbc.Driver", 40, 40, + 40, 10, 5); + } + + public static void main(String[] args) throws IOException, SQLException { + + DruidTest db = new DruidTest("jdbc:mysql://10.20.141.150:8066/amoeba"); + Connection conn = null; + Statement stmt = null; + ResultSet rs = null; + + FileWriter fileWriter = new FileWriter("D:\\data.txt"); + try{ + conn = db.getConn(); + }catch(Exception e){ + System.out.println(e.getMessage()); + } + + long sum = 0; + for (int i = 1; i < 10; i++) { + try { + stmt = conn.createStatement(); + Date start = new Date(); + rs = stmt + .executeQuery("select * from offer where member_id = 'forwd251'"); + Date end = new Date(); + sum = sum + (end.getTime() - start.getTime()); + fileWriter.write(String.valueOf((end.getTime() - start + .getTime()))); + fileWriter.write("/\n"); + + } catch (SQLException e) { + e.printStackTrace(); + } + } + System.out.println((float) sum / 10); + + + conn.close(); + stmt.close(); + rs.close(); + fileWriter.flush(); + fileWriter.close(); + } + +} diff --git a/src/test/java/com/alibaba/druid/pool/Test_kyline.java b/src/test/java/com/alibaba/druid/pool/Test_kyline.java index f6d5348093..048ab06246 100644 --- a/src/test/java/com/alibaba/druid/pool/Test_kyline.java +++ b/src/test/java/com/alibaba/druid/pool/Test_kyline.java @@ -1,6 +1,7 @@ package com.alibaba.druid.pool; import java.sql.Connection; +import java.sql.DriverManager; import junit.framework.TestCase; @@ -18,7 +19,7 @@ public class Test_kyline extends TestCase { ds.setPassword(password); ds.setDriverClassName(driver); - //DriverManager.getConnection(url, user, password); + DriverManager.getConnection(url, user, password); Connection conn = ds.getConnection(); conn.close();