Как избежать дублирования задач планировщика при развертывании в нескольких экземплярах - PullRequest
1 голос
/ 21 октября 2019

Есть приложение Spring Boot, с помощью которого я могу создать cron и планировать задачи. Однако при развертывании нескольких экземпляров приложения cron запускается во всех экземплярах и приводит к дублированию. Есть ли какая-либо конфигурация, которая должна быть выполнена на уровне весны?

Мы используем redis и используем флаг, которым можно управлять в других случаях, но нам нужен лучший подход для решения этой проблемы. Пробовал даже библиотеку redisson, которая не сильно помогла.

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

Спасибо

1 Ответ

1 голос
/ 21 октября 2019

Ознакомьтесь с этой статьей

Включите в свои зависимости phed.xml schedlock:

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>2.2.0</version>
</dependency>

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-provider-jdbc-template</artifactId>
    <version>2.1.0</version>
</dependency>

Создать shedlock таблицу

CREATE TABLE shedlock(
  name VARCHAR(64),
  lock_until TIMESTAMP(3) NULL,
  locked_at TIMESTAMP(3) NULL,
  locked_by  VARCHAR(255),
  PRIMARY KEY (name)
)

И не забудьте добавить имя к каждому создаваемому вами заданию.

@SchedulerLock(name = "job_name")

Таким образом, когда это задание будет выполняться в нескольких экземплярах, запись задания будет добавлена ​​в таблицу shedlockпервый экземпляр, а все остальные экземпляры проверят таблицу shedlock на наличие записей с необходимым именем задания. Таким образом, задание будет выполнено только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...