Планировщик на нескольких экземплярах сервера - PullRequest
1 голос
/ 21 июня 2020

Привет, у меня есть Java планировщик, который запускается каждый час, и у меня есть 16 экземпляров сервера, он будет развернут на всех 16 экземплярах сервера. Как я могу гарантировать, что эти задачи планировщика не будут sh налаживать друг друга. Мы не хотим вводить Spring batch.

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

В основном вы можете использовать 2 подхода для этого:

  1. Убедитесь, что каждый экземпляр управляет своими собственными данными (не разделяя их ни с одним другим).
  2. Убедитесь, что только один экземпляр может получать доступ к информации каждый раз.

Первый пункт зависит от вашей собственной бизнес-логики c, для второго есть несколько инструментов, которые могут вам помочь, с простой интеграцией со Spring:

Quartz

Shedlock (проще, чем Quartz, но с меньшей функциональностью)

1 голос
/ 21 июня 2020

На самом деле есть несколько способов.

  1. вы можете использовать распределенную блокировку (например, распределенную блокировку hazelcast).

  2. вы можете использовать pessimisti c блокировка в базе данных. (Блокировка таблицы для каждого запроса и установка статуса IN_PROGRESS)

  3. использование кварца для планирования. (Требуется постоянство Db)

...