如何避免由I/O错误引起的java.sql.SQLException:连接重置?

4

在SQL Server数据库重新启动后,我的Tomcat 6 Spring web应用程序在第一次尝试查询数据库时会收到一个SQL异常。请注意: Tomcat6在SQL Server重启期间继续运行,并且我正在使用myBatis。异常如下:

org.springframework.dao.DataAccessResourceFailureException: 错误查询数据库。原因:java.sql.SQLException:I/O错误:连接重置

任何后续查询都可以正常执行(无异常)。如何在第一个查询中避免这个异常?


你是在每次交互之前和之后打开和关闭连接,还是一直保持连接处于打开状态? - Jeff Hawthorne
1
我没有显式地关闭或打开连接。我已经建立了以下连接池:<Context> <Resource name="jdbc/webapp1" auth="Container" type="javax.sql.DataSource" password="password" driverClassName="net.sourceforge.jtds.jdbc.Driver" maxIdle="2" maxWait="5000" username="username" url="jdbc:jtds:sqlserver://sqlserver_url" maxActive="4"/> </Context> - James
问题在于当 SQL 服务器宕机时,连接会中断,直到重置后才能进行查询(这就是每次第一次查询时发生的情况)。我能想到的解决方法要么是手动在重新启动后重置 JDBC 连接,要么是定期使用计时过程测试连接并允许其抛出异常并重置连接。 - Jeff Hawthorne
1个回答

1

在将连接提供给您的应用程序之前,请设置您的池来测试连接

在您的数据库池连接中使用testOnBorrow=true和(例如)validationQuery="select 1"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接