2016-12-22 51 views
0

在我们的应用程序中,我们为不同的数据库创建了多个连接池。但是当其中一个出现如下错误时:如何区分哪个连接池在多个连接池上出错?

22/Dec/2016 08:26:03 WARN 62418062 [C3P0PooledConnectionPoolManager[identityToken->3037t89l9ahxjv1s5760x|71619ce5]HelperThread#0] com.mchange.v2.resourcepool.BasicResourcePool(L:1911) - com[email protected]5c9458eb – Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (5). Last acquisition attempt exception: 
java.sql.SQLException: ORA-01017: invalid username/password; logon denied 

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389) 
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:382) 
at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:675) 
at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:448) 
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513) 
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227) 
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:383) 
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:776) 
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:432) 
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553) 
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254) 
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528) 
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) 
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) 
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:214) 
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) 
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) 
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 

不可能知道哪个连接池实际获取错误。我错过了什么吗?有什么方法可以知道哪个连接池出错?

回答

1

每个连接池都有一个唯一的identityToken(在上例中为3037t89l9ahxjv1s5760x)。如果您通过JMX监控连接池,则可以看到哪些池具有此identityToken。您可以通过其getIdentityToken()方法以编程方式访问您的所有游泳池identityTokens。

+0

这将完成这项工作。谢谢。 – alpert