2011-01-08 4 views
4

Я хотел бы выполнять обновления базы данных MySQL, используя два отдельных класса (которые делают разные вещи) - каждый раз каждые 10 секунд, а второй каждую минуту. У меня есть несколько пробелов в знаниях Java, и мне интересно, что лучший способ добиться этого.Обновление базы данных периодически с помощью Java

Важно, что если связь с базой данных теряется, мне нужно, чтобы попытки повторного подключения выполнялись бесконечно, и я предполагаю, что использование подготовленных заявлений сделает запросы более эффективными. Должно ли соединение с базой данных оставаться открытым все время или закрываться между выполняемыми обновлениями? Возможно, мне также нужно подумать об очистке объектов/ресурсов от памяти, если экземпляры классов будут запущены неограниченное время.

ответ

1

Ответьте на свой первый вопрос «как запустить Java-класс за определенный интервал?»

Вы можете использовать quartz triggers для запуска класса java с интервалом времени.

Второй вопрос: «Что, если соединение потеряно?»

Проверить класс, выполняющийся с интервалом времени для подключения, если его открыть, а затем не пытаться подключиться, а если потеряно, сначала подключитесь к db, а затем обновите db.

Третий вопрос: «Должна ли связь оставаться открытой каждый раз?»

Если вы хотите сделать обновление с очень небольшим промежутком времени, тогда я думаю, что да, вы должны держать его открытым. Но не уверен в этом. Может быть, вы должны попытаться держать его открытым.

+0

Для многопользовательской базы данных вам обычно лучше закрыть соединение, как только вы не будете активно обмениваться данными с базой данных. Это позволит освободить ресурсы базы данных для других целей. Пул соединений в клиентской системе должен минимизировать затраты на повторное подключение. – newdayrising

+0

Да Пул соединения может быть решением. –

+0

Какое преимущество имеют триггеры кварца, используя ScheduledThreadPoolExecutor :: scheduleAtFixedRate? – MSR

0

Я бы сохранил подключение к базе данных открытым, но не пытаюсь самостоятельно управлять открытым соединением. Используйте библиотеку объединения пулов, например Apache DBCP. Он позволяет указать validationQuery, который технически представляет собой очень простой запрос SELECT, который выполняется перед фактическим оператором для проверки того, является ли соединение еще живым. В моем приложении это работает твердо (одно приложение, которое работает 24/7, запросы каждую минуту).

+0

Интересно. Я не уверен, как поможет запрос проверки, но если он запускается каждый раз, когда выполняются мои обычные запросы, они будут определять, доступна ли связь с базой данных сама по себе, не так ли? – MSR

+0

Если вы предпочитаете, чтобы ваш запрос SQL завершился неудачно, и вам придется переделать его вместо того, чтобы разрешить этот дескриптор DBCP с помощью запроса проверки внутри - ну, это ваш выбор. – Robert

+0

Ну, в этой ситуации данные, которые записываются в базу данных, действительны только на короткое время (показатели мониторинга сервера, например, загрузка процессора), поэтому я больше беспокоюсь о восстановлении соединения. – MSR

Смежные вопросы