java - Glassfish/Toplink 和 sqljdbc.jar 在断开的数据库连接上永远重试

标签 java sql-server jdbc glassfish sqljdbc

我将 Glassfish 和 Toplink 与 MS-SQL-Server 一起使用,因此 sqljdbc4.jar 用于连接到数据库。当数据库不可用时(数据库服务器关闭),CPU 使用率上升到 100%,并且 Glassfish 一直尝试永远连接。我的日志很快被以下消息填满:

FINE: TDSChannel (ConnectionID:7) read failed:Connection reset
FINE: *** SQLException:ConnectionID:7 com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset Connection reset
FINE: com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1368)com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1355)com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1532)com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3274)com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:3227)com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:3203)com.microsoft.sqlserver.jdbc.TDSReader.peekTokenType(IOBuffer.java:3420)com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:50)com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:39)com.microsoft.sqlserver.jdbc.SQLServerStatement.processExecuteResults(SQLServerStatement.java:1064)com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.processResponse(SQLServerPreparedStatement.java:345)com.microsoft.sqlserver.jdbc.TDSCommand.close(IOBuffer.java:4111)com.microsoft.sqlserver.jdbc.SQLServerStatement.discardLastExecutionResults(SQLServerStatement.java:99)com.microsoft.sqlserver.jdbc.SQLServerStatement.closeInternal(SQLServerStatement.java:592)com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.closeInternal(SQLServerPreparedStatement.java:170)com.microsoft.sqlserver.jdbc.SQLServerStatement.close(SQLServerStatement.java:604)com.sun.gjc.spi.ManagedConnectionFactory.isValidByTableQuery(ManagedConnectionFactory.java:397)com.sun.gjc.spi.ManagedConnectionFactory.isValid(ManagedConnectionFactory.java:297)com.sun.gjc.spi.ManagedConnectionFactory.getInvalidConnections(ManagedConnectionFactory.java:246)com.sun.enterprise.resource.AbstractConnectorAllocator.getInvalidConnections(AbstractConnectorAllocator.java:99)com.sun.enterprise.resource.AbstractResourcePool.removeInvalidResources(AbstractResourcePool.java:1535)com.sun.enterprise.resource.AbstractResourcePool.removeInvalidAndIdleResources(AbstractResourcePool.java:1515)com.sun.enterprise.resource.AbstractResourcePool.resizePool(AbstractResourcePool.java:1448)com.sun.enterprise.resource.AbstractResourcePool$Resizer.run(AbstractResourcePool.java:1610)java.util.TimerThread.mainLoop(Timer.java:512)java.util.TimerThread.run(Timer.java:462)

有没有办法设置数据库连接的重试限制,或者连接重试之间的暂停超时?

如何让 Glassfish 抛出异常而不是尝试永远连接?

最佳答案

我们追踪到,这似乎是 Microsoft 在 sqljdbc4.jar 中的一个错误:

https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=483322

关于java - Glassfish/Toplink 和 sqljdbc.jar 在断开的数据库连接上永远重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1227789/

相关文章:

java - 为什么 Integer 变量默认赋值为 null?

java - maven如何知道JAVA_HOME在Ubuntu中设置为环境变量

java - 测试在 Eclipse 中通过但在 Gradle 中失败。与 assertThat 有关

sql - 对每个月的字段进行累计和动态求和

java - Servlet 中的线程安全

java - 为什么即使对象被向上转换,Java 也会调用重写的方法?

sql-server - 如何使用SQL Server计算LCM值?

sql - 从文本中获取日期时间

java.sql.SQLException : No suitable driver found - Report Server 异常

java - JDBC 连接 : How to specify the port for data-transfer?