diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 6413a754a0..ad390463ea 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -166,7 +166,17 @@ public abstract class DruidAbstractDataSource implements DruidAbstractDataSource protected Date createdTime; - protected int connectionErrorRetryAttempts = 30; + protected int connectionErrorRetryAttempts = 30; + + protected boolean breakAfterAcquireFailure = false; + + public boolean isBreakAfterAcquireFailure() { + return breakAfterAcquireFailure; + } + + public void setBreakAfterAcquireFailure(boolean breakAfterAcquireFailure) { + this.breakAfterAcquireFailure = breakAfterAcquireFailure; + } public int getConnectionErrorRetryAttempts() { return connectionErrorRetryAttempts; diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index e7afa14cf8..918bb0ebd6 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -699,9 +699,13 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat errorCount++; if (errorCount > connectionErrorRetryAttempts && timeBetweenConnectErrorMillis > 0) { + if (breakAfterAcquireFailure) { + break; + } + try { Thread.sleep(timeBetweenConnectErrorMillis); - } catch (InterruptedException e1) { + } catch (InterruptedException interruptEx) { break; } } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceC3P0Adapter.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceC3P0Adapter.java index 41e022c307..05c34352a7 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceC3P0Adapter.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceC3P0Adapter.java @@ -13,7 +13,7 @@ public class DruidDataSourceC3P0Adapter implements DataSource, DruidDataSourceC3 public DruidDataSourceC3P0Adapter(){ dataSource = new DruidDataSource(); - + // setDefault this.setInitialPoolSize(3); this.setAcquireIncrement(3); @@ -281,6 +281,14 @@ public class DruidDataSourceC3P0Adapter implements DataSource, DruidDataSourceC3 dataSource.setTimeBetweenConnectErrorMillis(acquireRetryDelay); } + public boolean isBreakAfterAcquireFailure() { + return dataSource.isBreakAfterAcquireFailure(); + } + + public void setBreakAfterAcquireFailure(boolean breakAfterAcquireFailure) { + dataSource.setBreakAfterAcquireFailure(breakAfterAcquireFailure); + } + // ///////////////// @Override @@ -313,7 +321,6 @@ public class DruidDataSourceC3P0Adapter implements DataSource, DruidDataSourceC3 private String overrideDefaultUser; private String overrideDefaultPassword; private int propertyCycle; - private boolean breakAfterAcquireFailure; private boolean usesTraditionalReflectiveProxies; private String userOverridesAsString; private int maxAdministrativeTaskTime; @@ -440,12 +447,4 @@ public class DruidDataSourceC3P0Adapter implements DataSource, DruidDataSourceC3 this.propertyCycle = propertyCycle; } - public boolean isBreakAfterAcquireFailure() { - return breakAfterAcquireFailure; - } - - public void setBreakAfterAcquireFailure(boolean breakAfterAcquireFailure) { - this.breakAfterAcquireFailure = breakAfterAcquireFailure; - } - }