diff --git a/build.third_step6.gradle b/build.third_step6.gradle index 375893560..4c1207a87 100644 --- a/build.third_step6.gradle +++ b/build.third_step6.gradle @@ -100,8 +100,8 @@ task copyFiles(type:Copy,dependsOn:'compileJava'){ with dataContent.call("${srcDir}/fine-jedis/resources") with dataContent.call("${srcDir}/fine-cssparser/src") with dataContent.call("${srcDir}/fine-kryo/src") - with dataContent.call("${srcDir}/fine-lz4/resources") with dataContent.call("${srcDir}/fine-lz4/src") + with dataContent.call("${srcDir}/fine-lz4/resources") into "${classesDir}" } } diff --git a/fine-druid/src/com/fr/third/alibaba/druid/pool/DruidDataSource.java b/fine-druid/src/com/fr/third/alibaba/druid/pool/DruidDataSource.java index 567ccd5c8..8fd1f3937 100644 --- a/fine-druid/src/com/fr/third/alibaba/druid/pool/DruidDataSource.java +++ b/fine-druid/src/com/fr/third/alibaba/druid/pool/DruidDataSource.java @@ -602,7 +602,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat this.connectProperties = properties; } - private synchronized void createThreadChange() { + private synchronized void doSomethingBeforeCreationThreadBreak() { String threadName = "Druid-ConnectionPool-Create-" + System.identityHashCode(this) + this.getUrl(); createConnectionThread = new CreateConnectionThread(threadName); createConnectionThread.setStarted(false); @@ -613,6 +613,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } private void checkThread() throws SQLException { + if (createConnectionThread == null){ + throw new IllegalStateException("createConnectionThread not start!"); + } + if (destroyConnectionThread == null){ + throw new IllegalStateException("destroyConnectionThread not start!"); + } if (!createConnectionThread.isStarted() && !destroyConnectionThread.isStarted()) { synchronized (this) {//线程安全问题,加个双检锁 if (!createConnectionThread.isStarted() && !destroyConnectionThread.isStarted()) { @@ -2119,6 +2125,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } catch (InterruptedException e) { lastCreateError = e; lastErrorTimeMillis = System.currentTimeMillis(); + DruidDataSource.this.doSomethingBeforeCreationThreadBreak(); break; } finally { lock.unlock(); @@ -2152,10 +2159,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat try { Thread.sleep(timeBetweenConnectErrorMillis); - } catch (InterruptedException interruptEx) { - break; + } catch (InterruptedException ignore) { + } - DruidDataSource.this.createThreadChange(); + DruidDataSource.this.doSomethingBeforeCreationThreadBreak(); break; } } catch (RuntimeException e) { @@ -2165,6 +2172,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } catch (Error e) { LOG.error("create connection error", e); setFailContinuous(true); + DruidDataSource.this.doSomethingBeforeCreationThreadBreak(); break; }