当我使用连接池连接到数据库时,出现此异常。
然后我尝试使用基本的 Class.forName(); 连接到数据库和 DriverManager 方法我能够这样做..为什么会发生这种情况?
最佳答案
只要涉及连接池,就可能出现此问题。其原因如下。
原因:
- 假设您在应用程序中配置了连接池。并且您要求 5 个连接对象。
- 您的连接池通常由 Tomcat、Spring 或 CQ5(在我的例子中)等容器处理
- 现在您让应用程序空闲一段时间,但容器和连接池仍然处于 Activity 状态
- 现在是魔术,数据库服务器按计划重新启动。
- 这会使应用程序服务器连接池内的 Activity/Activity 连接对象中断
- 因此,当您进入下一时刻时,突然出现这些错误,而前一段时间工作正常。
解决方案:
您可以重置连接池 - 这是最好的选择。这将删除池中当前损坏的连接,并强制创建一个新的连接池,其中包含新的连接对象。
您可以重新启动应用程序服务器。不推荐。(您不能在生产中不断重新启动应用程序服务器)
引用Link
关于java.sql.SQLRecoverableException : No more data to read from socket when using a connection pool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898780/