c3p0 hängt in awaitAvailable mit hibernate
Ich die Konsole-Anwendung, die hängt, während der Ausführung. Hier ist meine Konfiguration:
cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/db?user=db&password=db");
cfg.setProperty("hibernate.connection.username", "db");
cfg.setProperty("hibernate.connection.password", "db");
cfg.setProperty("hibernate.connection.pool_size", "5");
cfg.setProperty("hibernate.connection.autocommit", "false");
cfg.setProperty("hibernate.c3p0.min_size", "5");
cfg.setProperty("hibernate.c3p0.max_size", "20");
cfg.setProperty("hibernate.c3p0.timeout", "300");
cfg.setProperty("hibernate.c3p0.max_statements", "50");
cfg.setProperty("hibernate.c3p0.idle_test_period", "3000");
Hier ist mein stacktrace:
"main" prio=10 tid=0x000000000168f800 nid=0x1c37 in Object.wait() [0x00007fa60d0ad000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool)
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1315)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
- locked <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool)
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:84)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:281)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
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:1392)
at org.kriyak.parser.IndexArchiveRapid.indexFile(IndexArchiveRapid.java:70)
at org.kriyak.parser.IndexArchiveRapid.main(IndexArchiveRapid.java:53)
Öffne ich nur eine conencton und es scheint nicht, dass ich austreten. Und auch ich benutze einen thread. Ich habe noch nicht angepasst, alle mysql Einstellungen mit Ausnahme der Speichernutzung. Mysql funktioniert von der Konsole. Warum kann das passieren? Ist dieses c3p0-Fehler?
Ist das der einzige thread in Ihrer Anwendung?
ja, es ist der einzige thread
ja, es ist der einzige thread
InformationsquelleAutor Stepan Yakovenko | 2012-12-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
geschieht dies sofort, oder nach einer Weile? das ist, führen Kassen, zunächst erfolgreich, aber dann hängen Sie wie diese? wenn dem so ist, sieht es aus wie eine Verbindung undicht. bitte versuchen Sie, c3p0 params unreturnedConnectionTimeout und debugUnreturnedConnectionStackTraces um zu sehen, ob es ein Leck gibt. Sehen
http://www.mchange.com/projects/c3p0/#configuring_to_debug_and_workaround_broken_clients , http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout , http://www.mchange.com/projects/c3p0/#debugUnreturnedConnectionStackTraces .
wenn dies sofort geschieht, wenn keine Verbindungen erfolgreich ausgecheckt, die Frage ist, ob der pool überhaupt gelingt, in den Erwerb von Verbindungen. standardmäßig wird, wenn es nie gelingt, nach etwa 30 Sekunden dein thread sollte brechen mit einem Fehler. (es sieht nicht wie Sie das gemacht haben, aber wenn zum Beispiel du, ich acquireRetryAttempts null, c3p0 möglicherweise hängen auf unbestimmte Zeit warten für den Anschluss.)
Debuggen c3p0 Fragen, ist es hilfreich zu erfassen, die version und config-Informationen, c3p0-dumps, logs auf INFO-Ebene auf der pool-Initialisierung.
Glück!
Ich war nicht die Schließung der zugrunde liegenden Verbindung, das war ausdrücklich gewünscht, in meinem Fall.
InformationsquelleAutor Steve Waldman
Auch, dass Sie noch nicht scheinen, um zu initialisieren, die checkoutTime parameter für c3p0, die angibt, Zeitspanne, die ein client warten soll, für den Erwerb eine Verbindung aus dem connection pool.
sehen http://www.mchange.com/projects/c3p0/#checkoutTimeout
InformationsquelleAutor Don Bosco