From a40071a3cb5e50ab2f8b8efb3e4cf5e228c10dd3 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 22 Aug 2018 17:29:26 +0800 Subject: [PATCH] DruidDataSource support initExceptionThrow config. --- .../druid/pool/DruidAbstractDataSource.java | 14 +++++++ .../alibaba/druid/pool/DruidDataSource.java | 2 +- .../bvt/pool/InitExceptionThrowTest.java | 38 +++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/InitExceptionThrowTest.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 7a48789287..a3b7fed7a5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -2027,6 +2027,20 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements return onFatalError; } + /** + * @ since 1.1.11 + */ + public boolean isInitExceptionThrow() { + return initExceptionThrow; + } + + /** + * @ since 1.1.11 + */ + public void setInitExceptionThrow(boolean initExceptionThrow) { + this.initExceptionThrow = initExceptionThrow; + } + public static class PhysicalConnectionInfo { private Connection connection; private long connectStartNanos; diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index d50e769295..7475fbabb6 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -887,7 +887,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat initedTime = new Date(); registerMbean(); - if (connectError != null && poolingCount == 0) { + if (connectError != null && poolingCount == 0 && !(initExceptionThrow && !asyncInit)) { throw connectError; } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/InitExceptionThrowTest.java b/src/test/java/com/alibaba/druid/bvt/pool/InitExceptionThrowTest.java new file mode 100644 index 0000000000..b5f9d0a627 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/InitExceptionThrowTest.java @@ -0,0 +1,38 @@ +package com.alibaba.druid.bvt.pool; + +import com.alibaba.druid.mock.MockDriver; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidPooledConnection; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Properties; + +public class InitExceptionThrowTest extends TestClone { + private DruidDataSource dataSource = new DruidDataSource(); + + private int connectCount = 0; + + protected void setUp() throws Exception { + dataSource.setInitExceptionThrow(true); + dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setDriver(new MockDriver() { + public Connection connect(String url, Properties info) throws SQLException { + if (connectCount++ < 1) { + throw new SQLException(""); + } + return super.connect(url, info); + } + }); + dataSource.setInitialSize(2); + } + + protected void tearDown() throws Exception { + dataSource.close(); + } + + public void test_pool() throws Exception { + DruidPooledConnection conn = dataSource.getConnection(); + conn.close(); + } +}