2016-12-22 85 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