2012-07-20 19 views
1

從mysql db獲取連接時,我正面臨令人沮喪的錯誤。我使用C3P0春3.1 & 休眠4 ..在Spring 3.1和休眠狀態下使用c3p0時,無法從MySQL DB獲得連接4

任何幫助可以理解很多!在此先感謝..

至於..


這裏是我的行家依賴於池:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <!-- Hibernate c3p0 connection pool --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 

春天Hibernate的數據庫配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="com.mysql.jdbc.Driver" /> 
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ext4playground" /> 
    <property name="user" value="xx" /> 
    <property name="password" value="xx" /> 
    <property name="maxPoolSize" value="10" /> 
    <property name="initialPoolSize" value="3" /> 
    <property name="maxStatements" value="50" /> 
    <property name="minPoolSize" value="3" /> 
    <property name="idleConnectionTestPeriod" value="100" /> 
    <property name="maxIdleTime" value="200" /> 
    <property name="acquireIncrement" value="1" /> 
</bean> 

<!-- Hibernate SessionFactory --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"><ref local="dataSource"/></property> 
    <property name="packagesToScan" value="com.tk.sample.ext4.model" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.use_sql_comments">true</prop> 
      <prop key="hibernate.format_sql">false</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.generate_statistics">true</prop> 
      <prop key="hibernate.connection.characterEncoding">UTF-8</prop> 
      <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> 
      <!-- c3p0 properties --> 
      <prop key="hibernate.c3p0.min_size">2</prop> 
      <prop key="hibernate.c3p0.max_size">50</prop> 
      <prop key="hibernate.c3p0.timeout">300</prop> 
      <prop key="hibernate.c3p0.max_statements">50</prop> 
      <prop key="hibernate.c3p0.idle_test_period">3000</prop> 
      <prop key="hibernate.c3p0.acquireRetryAttempts">30</prop> 
      <prop key="hibernate.c3p0.acquireIncrement">5</prop> 
      <prop key="hibernate.c3p0.initialPoolSize">2</prop> 
      <prop key="hibernate.c3p0.maxPoolSize">50</prop> 
      <prop key="hibernate.c3p0.maxIdleTime">300</prop> 
      <prop key="hibernate.c3p0.maxStatements">50</prop> 
      <prop key="hibernate.c3p0.minPoolSize">2</prop> 
      <prop key="hibernate.c3p0.preferredTestQuery">SELECT 1;</prop> 
      <prop key="hibernate.c3p0.testConnectionOnCheckout">true</prop>     
     </props> 
    </property> 
</bean> 

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> 
<tx:annotation-driven/> 
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory"><ref local="sessionFactory"/></property> 
</bean> 

完全堆棧跟蹤:

org.springframework.transaction.CannotCreateTransactionException: **Could not open Hibernate Session for transaction**; nested exception is org.hibernate.exception.GenericJDBCException: **Could not open connection** 
at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:440) 
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
at org.springframework.test.context.transaction.TransactionalTestExecutionListener$TransactionContext.startTransaction(TransactionalTestExecutionListener.java:513) 
at org.springframework.test.context.transaction.TransactionalTestExecutionListener.startNewTransaction(TransactionalTestExecutionListener.java:271) 
at org.springframework.test.context.transaction.TransactionalTestExecutionListener.beforeTestMethod(TransactionalTestExecutionListener.java:164) 
at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:358) 
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73) 
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:304) 
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) 
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) 
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) 
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1309) 
    at org.springframework.orm.hibernate4.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:399) 
    ... 23 more 
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database! 
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
    at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:79) 
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:279) 
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) 
    ... 28 more 
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) 
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
    ... 32 more 

回答

1

請檢查你的日誌。在上面顯示的異常之前,c3p0會記錄堆棧跟蹤,詳細說明池嘗試從數據庫獲取連接失敗。如果您將日誌記錄級別設置爲FINE(如果您需要特定的記錄器,請使用com.mchange.v2.resourcepool.BasicResourcePool),則會看到每次失敗的嘗試記錄。如果您將日誌級別保留在傳統的INFO(或WARN)級別,則只會在「一輪」失敗嘗試中發現最終失敗嘗試(默認情況下30次失敗嘗試,重試延遲1秒)。如果您已經登錄INFO,那麼您應該可以在日誌中找到這些例外。

請注意,在您的配置中,您已經定義了一些c3p0配置參數多達三次,有時不一致。這不是你的問題的原因,但它有點不雅,並且對實際需要的價值有一定的不確定性。例如,maxPoolSize,hibernate.c3p0.max_size和hibernate.c3p0.maxPoolSize都會使用相同的c3p0參數。如果您想查看實際設置的值,請​​檢查您的日誌(在INFO中)以獲取配置轉儲c3p0池在初始化時生成的信息。

+0

非常感謝您的幫助和關心..正如您在筆記中提到的那樣,一些重複的配置參數發生了這種不一致..「保持簡單」的座右銘總是有助於這些情況。 – talha06 2012-07-20 22:19:31