2010-09-01 55 views
1

我使用了Apache的BasicDataSource兩個公共DBCP和連接池Teradata的驅動程序問題:JDBC重新使用Spring和Apache的DataSource

org.apache.commons.dbcp.BasicDataSource 

,並通過春季管理它:

org.springframework.jdbc.datasource.DataSourceTransactionManager 

雖然如果我的數據庫出現故障或出現網絡故障,將此組合與Teradata JDBC驅動程序結合使用我會收到以下錯誤:

08S01 804 : I/O Error, Socket closed. Packet stream write error

這反映了正確的情況,但問題在於重新連接。當錯誤被物理化或DB恢復並且我的程序試圖查詢它時,我仍然會得到相同的錯誤一段時間,例如不同的錯誤。 20分鐘,小時,從不。 當我重新啓動我的JVM或更改連接字符串例如使用IP地址而不是主機名。

DataSource或Spring Transaction Manager中是否有任何設置可以糾正這種情況?或者可能是TCP/IP設置?

回答

1

我會考慮在Apache DBCP的設置:

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

SELECT 1可以是一個有效的驗證查詢。應設置退貨測試。

我還會問,它會刪除並記錄已放棄的連接,以便您可以看到發生了什麼。

+0

我們已經使用commons connection pool(我已經編輯了這個問題,謝謝) 它運行在Java服務包裝器(http://wrapper.tanukisoftware.com)下的普通JVM上,以運行它作爲Windows服務/ Unix守護進程。 – 2010-09-01 10:08:08

+0

我檢查出來了。有設置爲空閒,等待,但沒有任何錯誤或重新連接 – 2010-09-01 10:54:52

1

您是否在Windows和Linux上看到此錯誤?如果您只在Linux上看到它,那麼我建議查看Teradata JDBC指南。登錄時,他們使用Linux版JVM上速度較慢的算法。 嘗試添加以下行服務命令的德開始,看看你得到任何改善

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

注:這是在與Teradata JDBC驅動程序用戶指南的故障排除部分採取

+0

我們已經觀察到Linux和Windows數據庫上的這個問題。 但是,運行JVM的系統是Windows。 – 2010-09-16 10:45:00