我的团队使用带有 JTDS 驱动程序的纯 JDBC(无连接池)用 Java 构建了一个连接到 Windows 2003 Server 中的 SQL Server 2005 的 Windows 服务。
一段时间后,打开与数据库的连接的方法开始引发异常,并带有以下堆栈跟踪:
java.net.BindException: Address already in use: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl .java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSoc ketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.j ava:158)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:124)
尽管程序员在完成后很小心地关闭了连接,但有些事情并不顺利。
目前,我们解决了切换到命名管道协议的问题(因为所有都托管在同一台机器上),但这是一个临时解决方案。
我已经用谷歌搜索了这个问题,似乎我们应该使用一些连接池库,比如 c3p0。这是解决问题的唯一方法吗?
我可以尝试提高 Windows 2003 中的套接字限制吗?