Skip to content

Schedule tasks are called twice with the @SnapLock annotation

I want only one schedule method to work for many instances. I added the snap-scheduler to my project, and after that I deployed two different instances to the railway. And two entries about the execution of my method are added to the snap_lock table. –°an you explain where I went wrong?

It`s scheduler config:

public class SchedulerConfiguration {

    private static final String SNAP_DB_POOL_NAME = "snap-pool";

    @Bean(name = "snapDataSource")
    public DataSource customDataSource(final DataSourceProperties properties,
                                       @Value("${spring.datasource.hikari.schema}") final String schema) {
        final HikariDataSource dataSource = properties.initializeDataSourceBuilder()


        return dataSource;

It`s method with @SnapLock and @Scheduled annotations

public class SchedulerService {

    private static final String EUROPE_KIEV_ZONE = "Europe/Kiev";
    @SnapLock(key = "REPORT_CURRENT_TIME", time = 30)
    @Scheduled(cron = "0 */1 * * * *", zone = EUROPE_KIEV_ZONE)
    protected void test() {"time now equals = " +;

It`s psql

CREATE TABLE snap_lock
    task_key    text                     NOT NULL,
    task_method text                     NOT NULL,
    lock_until  timestamp with time zone NOT NULL,
    lock_at     timestamp with time zone NOT NULL,
    lock_by     text                     NOT NULL,
    CONSTRAINT snap_lock_pkey PRIMARY KEY (task_key, task_method)

CREATE TABLE snap_task_audit
    id               integer GENERATED BY DEFAULT AS identity,
    task_key         text                     NOT NULL,
    task_method      text                     NOT NULL,
    run_on           text                     NOT NULL,
    start_run        timestamp with time zone NOT NULL,
    end_run          timestamp with time zone NOT NULL,
    run_time_seconds numeric                  NOT NULL,
    task_error       jsonb,
    CONSTRAINT snap_task_audit_pkey PRIMARY KEY (id)

CREATE TABLE snap_scheduler
    name            text                     NOT NULL,
    task_key        text                     NOT NULL,
    type            text                     NOT NULL,
    task_class      text                     NOT NULL,
    task_data       jsonb,
    task_data_class text,
    run_at          timestamp with time zone NOT NULL,
    recurrence      text,
    picked          boolean                  NOT NULL DEFAULT false,
    picked_by       text,
    end_run         timestamp with time zone,
    CONSTRAINT snap_scheduler_pkey PRIMARY KEY (task_key)



As an alternative, I solved my problem using a library Everything is similar there, the method through the base is blocked. But there were no problems with crowns.