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();
+ }
}
}