Подтвердить что ты не робот

Кварцевый планировщик в кластерной среде

Я использую

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();
Trigger asapTrigger = getAsapTrigger();
JobDetail asapJob = getAsapJobDetails();
scheduler.scheduleJob(asapJob, asapTrigger);

Это работает, но когда я перехожу к среде кластера, 2 потока работают для одной и той же работы.

Я использую аннотации, а не файл свойств. Я хочу запустить только один поток. Может кто-то помочь в этом. Как настроить?

мой код выглядит примерно так: http://k2java.blogspot.com/2011/04/quartz.html

4b9b3361

Ответ 1

Вы должны настроить Quartz для работы в кластерной среде. В настоящее время кластеризация работает только с хранилищем заданий JDBC и позволяет каждому узлу кластера использовать одну и ту же базу данных.

  • Установите для свойства org.quartz.jobStore.isClustered значение true, если у вас есть несколько экземпляров Quartz, которые используют один и тот же набор таблиц базы данных. Это свойство используется для включения функций кластеризации.
  • Задайте свойство org.quartz.jobStore.clusterCheckinInterval (миллисекунды), которое является частотой, с которой этот экземпляр регистрируется с другими экземплярами кластера.
  • Установите для org.quartz.scheduler.instanceId значение AUTO, чтобы у каждого узла в кластере был уникальный instanceId.

Обратите внимание, что каждый экземпляр в кластере должен использовать одну и ту же копию файла quartz.properties. Кроме того, если вы используете кластеризацию на отдельных машинах, убедитесь, что их часы синхронизированы.

Дополнительную информацию смотрите в официальной документации, в которой содержится пример файла свойств для кластерного планировщика.