连接数据库时出现以下异常:
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
出现这种异常的原因是什么?
谢谢!
最佳答案
对于 h2 默认连接池大小为 10,登录超时为 30 秒,如果我们长时间获取 10 个并发连接,则新请求获取连接将超时。 对于我的案例,发现由于代码错误,连接没有关闭。我们可以增加最大连接数。
connectionPool.setMaxConnections(20);
但默认情况下,数据库管理器是单线程的,因此更多的连接不会获得任何性能。
关于java - H2 数据库(嵌入式)连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4437153/