diff --git a/pom.xml b/pom.xml index 34ef5dcb7a..2f3e8c2d13 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba druid - 1.1.20_preview_10 + 1.1.20_preview_11 jar druid @@ -16,8 +16,8 @@ 4.12 1.19 - false - false + true + true UTF-8 1.6 diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 2e355b1de7..f694275024 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -1754,8 +1754,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } lastFatalErrorTimeMillis = lastErrorTimeMillis; - onFatalError = true; fatalErrorCount++; + if (fatalErrorCount - fatalErrorCountLastShrink > onFatalErrorMaxActive) { + onFatalError = true; + } lastFatalError = error; lastFatalErrorSql = sql; } finally { @@ -2498,6 +2500,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat && (!(keepAlive && activeCount + poolingCount < minIdle)) // 在keepAlive场景不能放弃创建 && (!initTask) // 线程池初始化时的任务不能放弃创建 && !isFailContinuous() // failContinuous时不能放弃创建,否则会无法创建线程 + && !isOnFatalError() // onFatalError时不能放弃创建,否则会无法创建线程 ) { clearCreateTask(taskId); return; @@ -2985,14 +2988,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat boolean needFill = false; int evictCount = 0; int keepAliveCount = 0; + int fatalErrorIncrement = fatalErrorCount - fatalErrorCountLastShrink; + fatalErrorCountLastShrink = fatalErrorCount; + try { if (!inited) { return; } - int fatalErrorIncrement = fatalErrorCount - fatalErrorCountLastShrink; - fatalErrorCountLastShrink = fatalErrorCount; - final int checkCount = poolingCount - minIdle; final long currentTimeMillis = System.currentTimeMillis(); for (int i = 0; i < poolingCount; ++i) { @@ -3127,6 +3130,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } finally { lock.unlock(); } + } else if (onFatalError || fatalErrorIncrement > 0) { + lock.lock(); + try { + emptySignal(); + } finally { + lock.unlock(); + } } }