From 303f62053b048576cf4759f06031cee619547ec2 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 6 Sep 2011 14:44:13 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=9E=E6=8E=A5=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@664 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index b410850bea..f37e0f5917 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -659,15 +659,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat continue; } - Connection connection = connectionFactory.createConnection(); - connections[poolingCount++] = new ConnectionHolder(DruidDataSource.this, connection); - - errorCount = 0; // reset errorCount - - notEmpty.signal(); + } catch (InterruptedException e) { break; + } catch (RuntimeException e) { + LOG.error("create connection error", e); + } catch (Error e) { + LOG.error("create connection error", e); + break; + } finally { + lock.unlock(); + } + + Connection connection = null; + + try { + connection = connectionFactory.createConnection(); } catch (SQLException e) { LOG.error("create connection error", e); @@ -682,9 +690,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } catch (RuntimeException e) { LOG.error("create connection error", e); + continue; } catch (Error e) { LOG.error("create connection error", e); break; + } + + if (connection == null) { + continue; + } + + lock.lock(); + try { + connections[poolingCount++] = new ConnectionHolder(DruidDataSource.this, connection); + + errorCount = 0; // reset errorCount + + notEmpty.signal(); } finally { lock.unlock(); }