Как понять, когда шедлок был приобретен и выпущен? - PullRequest
0 голосов
/ 31 марта 2019

У меня есть такой код:

private final ThreadPoolTaskScheduler threadPoolTaskScheduler; // spring
private final LockingTaskExecutor lockingTaskExecutor; // shedlock
....
    threadPoolTaskScheduler.scheduleWithFixedDelay(
                    () -> {
                        lockConfiguration = ...
                        long start = System.currentTimeMillis();
                        LOGGER.info("Spring scheduler started task, awaiting shedlock ");
                        lockingTaskExecutor.executeWithLock((Runnable) () -> {
                                    LOGGER.info("Shedlock acquired. duration=[{}]ms", propertyItem, System.currentTimeMillis() - start);
                                taks();
                                },
                                lockConfiguration);
                    }, someInterval);

У меня есть 2 узла. По логам вижу ситуацию, что task() работает только на первом узле. На втором узле я вижу только Spring scheduler started task, awaiting shedlock

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

Как я могу подписаться на событие при снятии блокировки?

Как долго Шедлок пытается получить блокировку?

приписка

someInterval = 30 минут

lockConfiguration: по крайней мере 5 минут, atMost = 20 минут

1 Ответ

0 голосов
/ 31 марта 2019

Я изучил исходный код и обнаружил, что shedlock пытается получить блокировку, и если блокировка занята, она просто пропускает задачу

...