Кварцевая кластеризация - PullRequest
       27

Кварцевая кластеризация

1 голос
/ 15 февраля 2012

Сценарий: у меня есть два разных модуля (скажем, A и B). A развернут на двух разных машинах (скажем, A1 и A2), а B развернут на двух разных машинах (скажем, B1 и B2), и задание, связанное с модулем A, запланировано, а необходимые java-классы выполняются только с A (поэтому оба А1 и А2 есть).

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

Вся эта информация хранится в таблицах базы данных, связанных с кварцем.

Лучшая часть: во время / перед выполнением, если A1 выходит из строя, к счастью, если планировщик найдет A2 свободным, задание будет выполнено на A2. Все необходимые классы присутствуют на А2, поэтому проблем нет. УСПЕХ!

Плохая часть: во время / перед выполнением, если A1 выходит из строя, к сожалению, если планировщик обнаруживает, что B1 и B2 свободны, задание будет выполнено на любом из них, но поскольку требуемые классы отсутствуют на B1 / B2, я получаю исключение класс не найден. ПРОВАЛ!

Запрос. Как убедиться, что задания, связанные с модулем A, выполняются только на тех машинах, где развернута A, а не на машинах, где развернута B?

Заранее спасибо!

1 Ответ

0 голосов
/ 16 февраля 2012

Проблема решена: В файле quartz.properties.Установите свойство tablePrefix следующим образом:

org.quartz.jobStore.tablePrefix = QRTZ_ например, для модуля A: A_QRTZ_ и для модуля B: B_QRTZ_

В базе данных удалите все таблицы, начинающиеся с QRTZ_и создайте новые таблицы с префиксом A_QRTZ_ и B_QRTZ_

, поэтому модуль A получит доступ только к таблицам A_QRTZ_, а модуль получит доступ только к таблицам B_QRTZ_ в вышеупомянутом сценарии.

Количество таблиц будет увеличиваться, но, в конечном итоге, общее количество строк / данных, сохраненных в этих таблицах, будет таким же, как и раньше.

...