2010-12-14 21 views
1

データベースに接続するとき、私は次の例外を取得:H2データベース(組み込み)接続タイムアウト

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 

次のように接続文字列を検索します:

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

このような例外の原因になることができますどのような?

ありがとうございます!

答えて

1

docs about the automatic mixed modeを読んでいると思いますか?それは私のために働くので、問題が何であるか言うのは難しいです。 C:\ Users \ Michael.myadd \ db.lock.dbというファイルの内容を投稿できますか?私にとってそれは(接続後)です:

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

つまり、データベースが開いていて、それを開いたクライアントがこのIPアドレスとポートでサーバーを開始したことを意味します。

+0

ドキュメントを読みましたが、「接続がタイムアウトしました」という意味を理解できません。コンピュータを再起動すると問題は解消されましたが、何が起こったのかを知ることは面白いです... – spektom

+1

コンピュータのIPアドレスが変更された(たとえば、ワイヤレス接続が切断された)データベースは既に開いていました。 –

+0

は感謝します、ありがとう! – spektom

2

h2のデフォルトの接続プールサイズは10で、ログインタイムアウトは30秒です。これにより、10個の同時接続を長期間取得すると、新しい接続要求がタイムアウトになります。 私のケースでは、コードのバグにより接続が閉じられていないことがわかりました。最大接続数を増やすことができます。

connectionPool.setMaxConnections(20); 

デフォルトでは、dbマネージャはシングルスレッドであるため、より多くの接続でパフォーマンスが向上することはありません。

関連する問題