H2数据库(嵌入式)连接超时

时间:2010-12-14 08:18:27

标签: java database 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

这种例外的原因是什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

对于h2,默认连接池大小为10,登录超时为30秒,如果我们获得10个同时连接更长时间,则获取连接的新请求将超时。 因为我的案例发现由于代码中的错误,连接没有被关闭。我们可以增加最大连接数。

connectionPool.setMaxConnections(20);

但默认情况下,db manager是单线程的,因此更多连接不会获得任何性能。

答案 1 :(得分: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地址和端口上启动了服务器。

答案 2 :(得分:0)

<块引用>

先重启电脑(^_^)/再启动

我尝试了所有方法,但似乎唯一有效的是重新启动我的计算机。

以下列出了不起作用的事情:

  1. 刷新项目和 maven
  2. 关闭和打开应用程序
  3. 调整代码

我什至可以在 H2 控制台中看到数据库工作正常,但 eclipse 直到我重新启动计算机才能连接到它。

我多次记录此错误: “连接:org.h2.jdbc.JdbcSQLNonTransientConnectionException:连接中断:”java.net.SocketTimeoutException:连接超时:...”

我在午饭前重新启动连接到数据库,并在我的电脑上工作了一个小时。午饭就睡了,下午又要重启电脑才能连接数据库。

其他评论是关于MaxConnections,但我是唯一一个使用这个数据库的人。