Это нормально, чтобы закрыть соединение JDBC из другого потока по таймауту? - PullRequest
2 голосов
/ 28 сентября 2011

Поскольку ни одна из операций JDBC не имеет концепции тайм-аута, целесообразно ли попытаться закрыть JDBC-соединение просроченной операции из другого потока, если тайм-аут превышен?

Мне известен метод Statement.cancel, однако, похоже, он работает не во всех случаях. Кроме того, драйвер, который я использую, не отвечает на прерывания.

Я думаю, что Connection.close, к сожалению, является наименьшим общим знаменателем, который можно использовать для предотвращения утечки ресурсов в случае, если операция базы данных была запущена.

Мне известно, что при использовании пула соединений мне приходится закрывать настоящий объект соединения.

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

Лучший ответ, это зависит от того, какой драйвер вы используете.Но с точки зрения стека jdbc все должно быть в порядке.

1 голос
/ 29 сентября 2011

Для дерби все должно быть в порядке: http://db.apache.org/derby/docs/10.8/devguide/cdevconcepts23499.html

В соответствии со спецификацией JDBC вы можете делиться Соединениями и Заявлениями с несколькими потоками

0 голосов
/ 28 сентября 2011

Я бы обернул эту операцию в ThreadPoolExecutor с таймаутом.Это даст вам больше контроля над тем, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...