Какой стандартный способ в jdbc управлять потерянным соединением?

Мое приложение иногда может потерять соединение с базой данных MySQL. Я думаю, что хорошим решением будет запланировать некоторый таймер, чтобы попытаться восстановить соединение через некоторое время. Как лучше это можно сделать? Может быть отдельный поток, который пытается подключиться к БД? Или существуют стандартные практики? Спасибо.


person user710818    schedule 25.01.2012    source источник
comment
Вы можете найти подходящий ответ здесь.   -  person Web User    schedule 25.01.2012
comment
используйте пул соединений, например Apache DBCP   -  person Gabriel Belingueres    schedule 25.01.2012


Ответы (2)


JDBC - отличный способ начать создание приложения базы данных Java, но управление сопоставлениями объектов и соединениями / транзакциями может очень быстро привести к большому количеству шаблонов и переписыванию логики, которая уже была написана много раз многими программистами.

Ожидается, что вы должны нормально терять/закрывать соединение, если только у вас нет приложения с высокой пропускной способностью, и в этом случае вы можете поддерживать несколько активных соединений (это называется пулом соединений).

Существует 3 подхода "высокого уровня" к поддержанию эффективных подключений и транзакций:

1) Самое простое решение - проверять, когда вы повторно используете соединение, чтобы убедиться, что оно действительно, или каждый раз открывать его заново.

2) Более сложное решение — использовать механизм объединения соединений, такой как apache http://commons.apache.org/dbcp/ библиотека dbcp.

3) Наконец, на мой взгляд, наиболее удобным решением является использование среды JDBC, такой как ibatis/hibernate, которая предоставит вам простой декларативный интерфейс для управления реляционным сопоставлением объектов / транзакциями / состоянием базы данных - --- при этом также прозрачно поддерживая логику подключения для вас.

ТАКЖЕ: Если вам не нравится реляционное сопоставление объектов, вы можете использовать инфраструктуру, такую ​​​​как DBUtils от apache, для управления запросами и соединениями, не мешая тяжелому материалу сопоставления данных.

person jayunit100    schedule 25.01.2012

JDBC — это простой API для абстрагирования операций различных систем баз данных. Это делает что-то единообразным, такие разные нативные типы для типа java.

Однако потеря связи — еще одна большая проблема. Лучше использовать библиотеку пула соединений, чем писать новую самостоятельно. Слишком много деталей, чтобы реализовать пул соединений с нуля без ошибок.

Рассмотрите возможность использования зрелой библиотеки:

  • Commons-DBCP
  • кость
  • и т.д

Commons DBCP основан на Commons Pool. Вы должны понимать настраиваемые параметры обоих из них. Bonecp — еще один новый пул соединений, преимуществом которого является отсутствие блокировки.

Проверенная строка SQL важна для проверки соединения. Проверка потери соединения включается набором строк проверки.

Вот страница конфигурации dbcp: http://commons.apache.org/dbcp/configuration.html< /а>

В нем говорится:

ПРИМЕЧАНИЕ. Чтобы истинное значение имело какой-либо эффект, для параметра validationQuery должна быть задана ненулевая строка.

Например:

    dataSource.setValidationQuery(isDBOracle() ? "select 1 from dual" : "select 1");
    dataSource.setTestWhileIdle(true);
    dataSource.setTestOnReturn(true);
    dataSource.setRemoveAbandoned(true);
    dataSource.setRemoveAbandonedTimeout(60 * 3 /* 3 mins */);

    dataSource.setMaxIdle(30);
    dataSource.setMaxWait(1000 * 20 /* 20 secs*/);

Напоминаем: если вы используете Common DBCP в weblogic, не забудьте старую библиотеку Commons на сервере, она заставит ваше приложение использовать другую версию. Вам поможет настройка Prefer-web-inf-classes.

person qrtt1    schedule 25.01.2012