Тайм-аут соединения для DriverManager getConnection

Я нашел решение. Я недавно обновил свою машину до 64-разрядного Windows 2008 Server. SqlServer. Пространство имен репликации было записано для 32-разрядных платформ. Все, что я должен был сделать для получения его работающий снова, должно было установить Целевую платформу в Свойствах Сборки Проекта к X86.

23
задан Reinstate Monica - M. Schröder 21 January 2013 в 09:57
поделиться

2 ответа

Значение обычно управляется DB. Вы не можете контролировать это с помощью кода. Это зависит от используемого сервера БД. Обычно это от 30 минут до часа.

С другой стороны, постоянно держать Соединение открытым - очень плохая идея. Лучше всего получить и закрыть Connection , Statement и ResultSet в кратчайшей возможной области, чтобы избежать ресурса утечки и потенциальные сбои приложений, вызванные утечками и тайм-аутами.

Действительно, подключение БД - дорогостоящая задача. Если ваше приложение должно работать относительно долго и довольно часто подключать БД, рассмотрите возможность использования пула подключений для повышения производительности подключения. Если ваше приложение является веб-приложением, затем загляните в документацию к серверу приложений, она обычно предоставляет средство объединения соединений в виде источника данных . Если это клиентское приложение, поищите сторонние библиотеки пула соединений, которые доказали свою надежность годами, такие как Apache Commons DBCP (обычно используется, используется в серверах приложений), C3P0 (известно из Hibernate) и Proxool (если вам нужны XA-соединения).

Имейте в виду, что при использовании пула соединений вам все равно придется писать правильный код JDBC, iow получить и закрыть все ресурсы в кратчайшие возможные сроки. Пул соединений, в свою очередь, будет беспокоиться о фактическом закрытии соединения или просто освобождении его обратно в пул для дальнейшего использования.

26
ответ дан 29 November 2019 в 00:58
поделиться

Вы можете установить тайм-аут в DriverManager следующим образом:

 DriverManager.setLoginTimeout(10);
 Connection c = DriverManager.getConnection(url, username, password);

Это будет означать, что если соединение не может быть открыто в течение заданного времени, оно истекает.

С точки зрения сохранения соединение открыто навсегда, это возможно, если вы не закроете соединение, но это может быть не очень хорошей идеей. Соединения должны быть закрыты, как только вы закончите с ними.

Если вы хотите оптимизировать открытие и закрытие соединений, вы можете использовать пул соединений.

30
ответ дан 29 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: