diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 98bbc55c6b..47cdfa6bf5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -72,7 +72,7 @@ import com.alibaba.druid.util.JdbcUtils; */ public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource { - private final static Log LOG = LogFactory.getLog(DruidDataSource.class); + public final static Log LOG = LogFactory.getLog(DruidDataSource.class); private static final long serialVersionUID = 1L; @@ -288,7 +288,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat DataSourceProxyConfig config = DruidDriver.parseConfig(jdbcUrl, null); this.driverClass = config.getRawDriverClassName(); - LOG.error("error url : " + jdbcUrl + ", it should be : " + config.getRawUrl()); + LOG.error("error url : '" + jdbcUrl + "', it should be : '" + config.getRawUrl() + "'"); this.jdbcUrl = config.getRawUrl(); if (this.name == null) { diff --git a/src/main/java/com/alibaba/druid/support/logging/JakartaCommonsLoggingImpl.java b/src/main/java/com/alibaba/druid/support/logging/JakartaCommonsLoggingImpl.java index c09c9b83a3..0d77caf47a 100644 --- a/src/main/java/com/alibaba/druid/support/logging/JakartaCommonsLoggingImpl.java +++ b/src/main/java/com/alibaba/druid/support/logging/JakartaCommonsLoggingImpl.java @@ -7,6 +7,8 @@ public class JakartaCommonsLoggingImpl implements com.alibaba.druid.support.logg private Log log; + private int errorCount; + public JakartaCommonsLoggingImpl(Class clazz){ log = LogFactory.getLog(clazz); } @@ -17,10 +19,12 @@ public class JakartaCommonsLoggingImpl implements com.alibaba.druid.support.logg public void error(String s, Throwable e) { log.error(s, e); + errorCount++; } public void error(String s) { log.error(s); + errorCount++; } public void debug(String s) { @@ -40,4 +44,14 @@ public class JakartaCommonsLoggingImpl implements com.alibaba.druid.support.logg log.warn(s, e); } + public int getErrorCount() { + return errorCount; + } + + + @Override + public void resetStat() { + errorCount = 0; + } + } diff --git a/src/main/java/com/alibaba/druid/support/logging/Jdk14LoggingImpl.java b/src/main/java/com/alibaba/druid/support/logging/Jdk14LoggingImpl.java index 70bdcd042c..8eeb543769 100644 --- a/src/main/java/com/alibaba/druid/support/logging/Jdk14LoggingImpl.java +++ b/src/main/java/com/alibaba/druid/support/logging/Jdk14LoggingImpl.java @@ -6,6 +6,8 @@ import java.util.logging.Logger; public class Jdk14LoggingImpl implements Log { private Logger log; + + private int errorCount; public Jdk14LoggingImpl(Class clazz){ log = Logger.getLogger(clazz.toString()); @@ -17,10 +19,12 @@ public class Jdk14LoggingImpl implements Log { public void error(String s, Throwable e) { log.log(Level.SEVERE, s, e); + errorCount++; } public void error(String s) { log.log(Level.SEVERE, s); + errorCount++; } public void debug(String s) { @@ -40,4 +44,13 @@ public class Jdk14LoggingImpl implements Log { log.log(Level.WARNING, s, e); } + public int getErrorCount() { + return errorCount; + } + + + @Override + public void resetStat() { + errorCount = 0; + } } diff --git a/src/main/java/com/alibaba/druid/support/logging/Log.java b/src/main/java/com/alibaba/druid/support/logging/Log.java index fe59eaa116..6127466053 100644 --- a/src/main/java/com/alibaba/druid/support/logging/Log.java +++ b/src/main/java/com/alibaba/druid/support/logging/Log.java @@ -16,4 +16,7 @@ public interface Log { void warn(String s, Throwable e); + int getErrorCount(); + + void resetStat(); } diff --git a/src/main/java/com/alibaba/druid/support/logging/Log4jImpl.java b/src/main/java/com/alibaba/druid/support/logging/Log4jImpl.java index f09643eea8..2fa2a7d098 100644 --- a/src/main/java/com/alibaba/druid/support/logging/Log4jImpl.java +++ b/src/main/java/com/alibaba/druid/support/logging/Log4jImpl.java @@ -5,6 +5,8 @@ import org.apache.log4j.Logger; public class Log4jImpl implements Log { private Logger log; + + private int errorCount; public Log4jImpl(Class clazz){ log = Logger.getLogger(clazz); @@ -37,5 +39,13 @@ public class Log4jImpl implements Log { public void warn(String s, Throwable e) { log.warn(s, e); } + + public int getErrorCount() { + return errorCount; + } + @Override + public void resetStat() { + errorCount = 0; + } } diff --git a/src/main/java/com/alibaba/druid/support/logging/NoLoggingImpl.java b/src/main/java/com/alibaba/druid/support/logging/NoLoggingImpl.java index 89688f14dd..57fe946003 100644 --- a/src/main/java/com/alibaba/druid/support/logging/NoLoggingImpl.java +++ b/src/main/java/com/alibaba/druid/support/logging/NoLoggingImpl.java @@ -2,6 +2,8 @@ package com.alibaba.druid.support.logging; public class NoLoggingImpl implements Log { + private int errorCount; + public NoLoggingImpl(Class clazz){ } @@ -10,9 +12,11 @@ public class NoLoggingImpl implements Log { } public void error(String s, Throwable e) { + errorCount++; } public void error(String s) { + errorCount++; } public void debug(String s) { @@ -29,4 +33,12 @@ public class NoLoggingImpl implements Log { } + public int getErrorCount() { + return errorCount; + } + + @Override + public void resetStat() { + errorCount = 0; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java index 5948417869..f87d99ddfb 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest.java @@ -2,6 +2,7 @@ package com.alibaba.druid.bvt.pool; import java.sql.Connection; +import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; @@ -21,8 +22,12 @@ public class ConfigErrorTest extends TestCase { } public void test_connect() throws Exception { - Connection conn = dataSource.getConnection(); + DruidDataSource.LOG.resetStat(); + Assert.assertEquals(0, DruidDataSource.LOG.getErrorCount()); + Connection conn = dataSource.getConnection(); conn.close(); + + Assert.assertEquals(1, DruidDataSource.LOG.getErrorCount()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java new file mode 100644 index 0000000000..4b7d4470cb --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest2.java @@ -0,0 +1,35 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; + +public class ConfigErrorTest2 extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:wrap-jdbc:jdbc:mock:xxx"); + dataSource.setTestOnBorrow(false); + dataSource.setTestOnReturn(false); + dataSource.setTestWhileIdle(false); + } + + protected void tearDown() throws Exception { + dataSource.close(); + } + + public void test_connect() throws Exception { + DruidDataSource.LOG.resetStat(); + Assert.assertEquals(0, DruidDataSource.LOG.getErrorCount()); + + Connection conn = dataSource.getConnection(); + conn.close(); + + Assert.assertEquals(1, DruidDataSource.LOG.getErrorCount()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java new file mode 100644 index 0000000000..0a6a83a755 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConfigErrorTest3.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.bvt.pool; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; + +public class ConfigErrorTest3 extends TestCase { + + private DruidDataSource dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mysql:xxx"); + dataSource.setTestOnBorrow(false); + dataSource.setTestOnReturn(false); + dataSource.setTestWhileIdle(false); + dataSource.setInitialSize(0); + dataSource.setPoolPreparedStatements(true); + } + + protected void tearDown() throws Exception { + dataSource.close(); + } + + public void test_connect() throws Exception { + DruidDataSource.LOG.resetStat(); + Assert.assertEquals(0, DruidDataSource.LOG.getErrorCount()); + dataSource.init(); + Assert.assertEquals(1, DruidDataSource.LOG.getErrorCount()); + } +}