Ознакомьтесь с этой статьей
Включите в свои зависимости 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
на наличие записей с необходимым именем задания. Таким образом, задание будет выполнено только один раз.