JDBC使用Spring和Apache DataSource重新连接Teradata驱动程序的问题

时间:2010-09-01 09:39:32

标签: spring jdbc datasource teradata

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

org.apache.commons.dbcp.BasicDataSource

并通过Spring管理它:

org.springframework.jdbc.datasource.DataSourceTransactionManager

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

  

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

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

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

2 个答案:

答案 0 :(得分:1)

我会查看Apache DBCP上的设置:

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

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

我还要求它删除并记录已放弃的连接,以便您可以看到正在发生的事情。

答案 1 :(得分:1)

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

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

注意:这取自Teradata JDBC Driver用户指南的故障排除部分