SQLState relac:08S01,thread:0
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通讯链接失败
成功发送到服务器的最后一个数据包是0毫秒前。驱动程序未收到来自服务器的任何数据包。 ...更多
引起:java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):connect at java.net.PlainSocketImpl.socketConnect(Native Method) 在java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 在java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 在java.net.Socket.connect(Socket.java:529) 在java.net.Socket.connect(Socket.java:478) 在java.net.Socket。(Socket.java:375) 在java.net.Socket。(Socket.java:218) 在com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) 在com.mysql.jdbc.MysqlIO。(MysqlIO.java:294) ......还有20个
我使用N个线程,有时不会在特定时间(X分钟)
我尝试使用不同的驱动程序,但我无法解决问题。
答案 0 :(得分:2)
你最有可能
我猜它是#1。仔细检查您的代码并确保关闭所有Connection对象和ResultSet对象。
如果您遇到#2,那么您可能需要考虑使用更少的线程(在某个点上有太多线程弊大于利)或使用像c3p0这样只会创建的连接池一组连接并允许您的线程共享它们。一般来说,使用c3p0是一个好主意,也应该允许你更快地检测#1。
第三种选择是使用更高级别的抽象,例如JPA或JDO,它将为您处理连接管理。
答案 1 :(得分:0)
在我的例子中,我们使用基于JbossSeam框架的JBoss服务器上的MsSQL服务器和应用程序。 此错误是由于hibernate和hsqldb的版本不匹配造成的。尝试更新两个库的最新版本和错误将消失。例如在maven下面,hibernate 4.3.6.Final与hsqldb 2.2.9完全兼容。 这种方式帮助了我们