0

我们开始使用 ShedLock,每天需要运行两个任务。因此,我在一个类中定义了两个具有不同锁名称的任务(以便它们可以同时运行)。我为展位作业设置了相同的执行开始时间。但由于某种原因,这些任务是在两个实例上执行的(我们总共有 3 个实例)。在 tst 上它运行良好(可能是因为数据集较小)。我试图理解为什么。

这是我的课:

@Service
public class ProcessDataScheduledService {

private final MyService myService;

@Scheduled(cron = "0 0 1 * * *")
@SchedulerLock(name = "task1"
            lockAtLeastFor = "PT1H",
            lockAtMostFor = "PT1H")
public void processData1() {
        myService.doSomething_1();
    }

@Scheduled(cron = "0 0 1 * * *")
@SchedulerLock(name = "task2",
            lockAtLeastFor = "PT1H",
            lockAtMostFor = "PT1H")
public void processData2() {
        myService.doSomething_2();
    }
}

锁提供者:

public LockProvider lockProvider(@Qualifier("pgsqlDataSource") DataSource dataSource) {
        return new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder()
                .withJdbcTemplate(new JdbcTemplate(dataSource))
                .usingDbTime()
                .build());
}

以下是有关任务开始和结束的信息:

task1    host = server_1,  time execution: 01:00:00.313 --- 02:02:54.695
task2    host = server_1,  time execution: 02:02:54.709 --- 05:25:02.066

task2    host = server_2,  time execution: 01:00:00.321 --- 04:21:13.377
task1    host = central_2,  time execution: 04:21:13.398 --- 05:19:08.828
4

0 回答 0