1

我将 Apache BasicDataSource 用于公共 DBCP 和连接池:

org.apache.commons.dbcp.BasicDataSource

并通过 Spring 管理它:

org.springframework.jdbc.datasource.DataSourceTransactionManager

如果我的数据库出现故障或出现网络故障,则在将此组合与 Teradata JDBC 驱动程序结合使用时,我会收到以下错误:

08S01 804:I/O 错误,套接字关闭。数据包流写入错误

这正确反映了情况,但问题在于重新连接。当错误被物理解决或数据库恢复并且我的程序尝试查询它时,我仍然会在一段时间内收到相同的错误,例如 20 分钟、几小时、从不。当我重新启动 JVM 或更改连接字符串(例如使用 IP 地址而不是主机名)时,问题就会消失。

DataSource 或 Spring Transaction Manager 中是否有任何设置可以纠正这个问题?或者可能是 TCP/IP 设置?

4

2 回答 2

1

我会查看 Apache DBCP 上的设置:

http://commons.apache.org/dbcp/configuration.html

SELECT 1可以是一个有效的验证查询。应设置返回测试。

我还要求它删除并记录放弃的连接,以便您查看发生了什么。

于 2010-09-01T09:44:19.173 回答
1

您在 Windows 和 Linux 上都看到此错误吗?如果您只在 Linux 上看到它,那么我建议您查看 Teradata JDBC 指南。登录时,他们使用的算法在 Linux 版本的 JVM 上速度很慢。尝试将以下行添加到服务命令的开头,看看是否有任何改进

-Djava.security.edg=file:/dev/./urandom

注意:这取自 Teradata JDBC 驱动程序用户指南的故障排除部分

于 2010-09-15T19:19:30.377 回答