2010-12-14 4 views
1

Ich erhalte die folgende Ausnahme, wenn die Verbindung zur Datenbank:H2 Database (embedded) Verbindungs-Timeout

org.h2.jdbc.JdbcSQLException: Connection is broken: "connect timed out" [90067-142] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:327) 
    at org.h2.message.DbException.get(DbException.java:156) 
    at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:326) 
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:248) 
    at org.h2.engine.SessionRemote.createSession(SessionRemote.java:214) 
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:111) 
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:95) 
    at org.h2.Driver.connect(Driver.java:73) 
    at java.sql.DriverManager.getConnection(DriverManager.java:582) 
    at java.sql.DriverManager.getConnection(DriverManager.java:185) 
................ 
Caused by: java.net.SocketTimeoutException: connect timed out 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:525) 
    at org.h2.util.NetUtils.createSocket(NetUtils.java:109) 
    at org.h2.util.NetUtils.createSocket(NetUtils.java:91) 
    at org.h2.engine.SessionRemote.initTransfer(SessionRemote.java:92) 
    at org.h2.engine.SessionRemote.connectServer(SessionRemote.java:322) 
    ... 38 more 

Die Verbindungszeichenfolge sieht wie folgt aus:

jdbc:h2:C:\Users\Michael\.myadd\db;AUTO_SERVER=TRUE;CIPHER=AES 

Was ist der Grund für eine solche Ausnahme sein ?

Danke!

Antwort

1

Ich denke, Sie lesen die docs about the automatic mixed mode? Es ist schwer zu sagen, was das Problem ist, denn für mich funktioniert es. Könnten Sie den Inhalt der Datei C: \ Users \ Michael.myadd \ db.lock.db veröffentlichen? Für mich ist es (nach dem Anschluss):

#FileLock 
#Tue Dec 14 22:29:22 CET 2010 
id=12ce6c9a16a912077e514cc6fff231e91b09d2dbe43 
method=file 
server=192.168.0.126\:52068 

Das heißt, die Datenbank geöffnet ist, und der Client, fing es an einen Server auf dieser IP-Adresse und Port geöffnet.

+0

Ich lese die Dokumente, aber ich kann immer noch nicht verstehen, was "Zeitüberschreitung der Verbindung" bedeutet. Nach dem Neustart des Rechners ging das Problem weg, aber es ist interessant zu wissen, was passiert ist ... – spektom

+1

Was es sein könnte (ich habe es nicht getestet) ist, dass sich die IP-Adresse des Rechners geändert hat (zB die WLAN-Verbindung ausgefallen) Die Datenbank war bereits geöffnet. –

+0

macht Sinn, danke! – spektom

2

Für h2 Standard-Verbindung Pool-Größe ist 10 und Login-Timeout ist 30 Sekunden, wenn wir 10 gleichzeitige Verbindung für längere Zeit erwerben, dann neue Anfrage, um Verbindung zu erhalten, wird abgelaufen. für meinen Fall festgestellt, dass die Verbindung wegen eines Fehlers im Code nicht geschlossen wurde. Wir können die Anzahl der maximalen Verbindungen erhöhen.

aber standardmäßig ist db manager single threaded, so dass mehr Verbindung keine Leistung erhält.