2014-07-19 14 views
6

Sto utilizzando Hibernate, la connessione MySQL è valida ma ottengo il seguente. Come posso vedere più dettagli sulla stringa di connessione a cui si sta connettendo?java.sql.SQLException: non è stato possibile acquisire connessioni dal database sottostante

ERROR SchemaUpdate - could not get database metadata 
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.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) 
     at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:168) 
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:356) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 
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) 
     ... 10 more 
ERROR SchemaUpdate - could not complete schema update 
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.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) 
     at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:168) 
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:356) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 
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) 
     ... 10 more 

ERROR JDBCExceptionReporter - Connections could not be acquired from the underlying database! 
org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
     at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
     at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
     at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
     at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
     at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342) 
     at com.sun.proxy.$Proxy0.beginTransaction(Unknown Source) 

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.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) 
     at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
     ... 15 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) 
     ... 18 more 

Ecco il mio hibernate xml:

<hibernate-configuration> 
    <session-factory> 

     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property> 

     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">xxxxxx</property> 

     <property name="show_sql">false</property> 
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.hbm2ddl.auto">update</property> 
     <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
     <property name="hibernate.c3p0.max_statements">200</property> 

     <property name="hibernate.c3p0.min_size">20</property> 
     <property name="hibernate.c3p0.max_size">200</property> 
     <property name="hibernate.c3p0.idle_test_period">300</property> 
     <property name="hibernate.c3p0.timeout">300</property> 

     <property name="hibernate.c3p0.max_statements">200</property> 
     <property name="current_session_context_class">thread</property> 

    </session-factory> 
</hibernate-configuration> 
+0

Sta succedendo su ogni operazione o solo alcune volte? – bitkot

+0

@AmitChotaliya succede sempre, posso connettermi a jdbc: mysql: // localhost: 3306/test e jdbc: mysql: //127.0.0.1: 3306/test senza problema alla riga di comando, le porte sono aperte – user121196

+0

Ok, L'ho chiesto perché questo accade quando si esauriscono le connessioni. io in c3p0 hai 200 connessioni consentite, ma mysql ha un limite massimo di 151, quindi se provi ad acquisire dopo, otterrai questo errore. – bitkot

risposta

2

Io vi consiglio due cose per ottenere questo problema risolto: In primo luogo, prova a menzionare il nome del database in lettere maiuscole. Sebbene db sia ancora insensibile alle maiuscole e minuscole, a volte funziona bene con i cappucci.

In secondo luogo, questo problema può sorgere a causa di alcuni elementi aggiuntivi che potrebbero essere stati aggiunti al valore di fabbrica della sessione. Per esempio (i prenderò codice che ho usato e affrontato questo problema e la sono liberato di esso): Parte del mio xml è questa:

<session-factory> 
    <property name="hbm2ddl.auto">update</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="connection.url">jdbc:mysql://10.184.56.183:3306/******?relaxAutoCommit=true&amp;autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8</property> 
    <property name="connection.username">******</property> 
    <property name="connection.password">******</property> 
    <property name="hibernate.show_sql">true</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.current_session_context_class">thread</property> 
    <property name="hibernate.connection.pool_size">5</property> 
    <property name="hibernate.connection.shutdown">true</property> 
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
    <property name="hibernate.cache.use_second_level_cache">false</property> 
    <property name="hibernate.cache.use_query_cache">false</property> 
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <property name="hibernate.c3p0.min_size">2</property> 
    <property name="hibernate.c3p0.max_size">5</property> 
    <property name="hibernate.c3p0.timeout">108000</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">1000</property> 
    <property name="hibernate.c3p0.validate">true</property> 
    <property name="hibernate.c3p0.acquire_increment">5</property>  

Così mantenere rifilatura valori extra come pulire il vostro URL connessione al database e altro cose. Ho affrontato il problema durante la generazione del codice dalla tabella del database. Così ho creato un diverso xml di configurazione e l'ho reso il più semplice possibile e questo è tutto. Andò molto bene.

+1

Dovrebbe essere il commento non una risposta! – Hamad

+0

Hey @Hamad, va bene adesso? o devo cambiare questo per commentare? –

1

Nel mio caso era problema che il file non è stato c3p0-0.9.2.1.jar copiato da Maven in src/main/webapp/web-inf/libs

1

Ho avuto questo problema e la questione era il nostro indirizzo IP ufficio essere bloccato dal server MySQL a causa di molti collegare i tentativi utilizzando cattive credenziali.

Assicurarsi di poter connettersi al server utilizzando lo stesso metodo/rete dell'applicazione. Se si ottiene questo o qualcosa di simile quando si tenta di connettersi utilizzando alcuni client MySQL (come Workbench)

Host 'XXX-XXX-XXX-XXX.static.XXXXXX.XXX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 

Il tuo IP è bloccato e che è il problema.

Problemi correlati