初次使用C3P0會如果配置錯誤搓茬,會引發(fā)以下異常芽突,乍一看以為是會連接池超時問題试浙。
其實是配置錯誤,連接池根本沒有Connection
對象寞蚌,所以根本拿不到連接對象田巴。
Exception in thread "main" java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:77)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:690)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
at datasource.C3p0Test.main(C3p0Test.java:13)
Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@12bc6874 -- timeout at awaitAvailable()
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1467)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:758)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:685)
... 2 more
我的之前的配置文件如下所示,<property name="jdbcUrl">jdbc:postgresql//localhost:5432/shop</property>
兩個postgresql和//之間漏打了:挟秤,倒是參數(shù)配置異常報錯壹哺,所以初學(xué)者最好仔細檢查配置參數(shù)是否正確。
<c3p0-config>
<!-- 使用默認(rèn)的配置讀取連接池對象 -->
<default-config>
<!-- 連接參數(shù) -->
<property name="driverClass">org.postgresql.Driver</property>
<property name="jdbcUrl">jdbc:postgresql//localhost:5432/shop</property>
<property name="user">postgres</property>
<property name="password">123456</property>
<!-- 連接池參數(shù) -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">3000</property>
</default-config>
</c3p0-config>