Проблемы повторного подключения JDBC с драйвером Teradata с использованием Spring и Apache DataSource - PullRequest
1 голос
/ 01 сентября 2010

Я использую Apache BasicDataSource для общего ресурса DBCP и пула соединений:

org.apache.commons.dbcp.BasicDataSource

и управляю им через Spring:

org.springframework.jdbc.datasource.DataSourceTransactionManager

При использовании этой комбинации с JDBC Teradataдрайвер, если моя база данных выходит из строя или возникает сбой в сети, я получаю следующую ошибку:

08S01 804: ошибка ввода-вывода, сокет закрыт.Ошибка записи потока пакетов

Это правильно отражает ситуацию, но проблема заключается в переподключении.Когда ошибка устраняется физически или БД возвращается в исходное состояние, и моя программа пытается запросить ее, я все равно получаю ту же ошибку в течение некоторого периода времени, который варьируется, например, 20 минут, часов, никогда.Проблема исчезает, когда я перезагружаю свою JVM или меняю строку подключения, например, использую IP-адрес вместо имени хоста.

Есть ли какие-либо настройки в DataSource или Spring Transaction Manager, которые могут это исправить?или может быть настройка TCP / IP?

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Вы видите эту ошибку как в Windows, так и в Linux?Если вы видите это только в Linux, то я рекомендую ознакомиться с Руководством по JDBC Teradata.При входе в систему они используют алгоритм, который работает медленно в Linux-версии JVM.Попробуйте добавить следующую строку в начало служебной команды, чтобы узнать, есть ли у вас какие-либо улучшения

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

Примечание: это было взято из раздела, посвященного устранению неполадок в Руководстве пользователя драйвера JDBC Teradata

1 голос
/ 01 сентября 2010

Я бы посмотрел в настройках на Apache DBCP:

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

SELECT 1 может быть эффективным запросом проверки. Тест на возврат должен быть установлен.

Я бы также попросил, чтобы он удалял и регистрировал пропущенные соединения, чтобы вы могли видеть, что происходит.

...