Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Shedlock为单个作业在数据库中创建多个条目_Spring Boot - Fatal编程技术网

Spring boot Shedlock为单个作业在数据库中创建多个条目

Spring boot Shedlock为单个作业在数据库中创建多个条目,spring-boot,Spring Boot,我们使用shedlock在azure webapp上对容器进行集群。现在我的clode看起来像: @Scheduled(cron = "0 0 0/3 * * ?") @SchedulerLock(name = "giveBonus", lockAtMostFor = TWO_HOURS, lockAtLeastFor = TWO_HOURS) public void giveBonus() { } 我的shedlock代码如下所示: @Bean public ScheduledLockCon

我们使用shedlock在azure webapp上对容器进行集群。现在我的clode看起来像:

@Scheduled(cron = "0 0 0/3 * * ?")
@SchedulerLock(name = "giveBonus", lockAtMostFor = TWO_HOURS, lockAtLeastFor = TWO_HOURS)
public void giveBonus() {
}

我的shedlock代码如下所示:

@Bean
public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
    return ScheduledLockConfigurationBuilder.withLockProvider(lockProvider).withPoolSize(10)
            .withDefaultLockAtMostFor(Duration.ofMinutes(10)).build();
}


@Bean
public LockProvider lockProvider(DataSource dataSource) {
    return new JdbcTemplateLockProvider(dataSource);
}
现在,大多数情况下,我看到,即使我们有一个应用程序实例,数据库中也有多个条目是用相同的作业名称创建的,而且几乎是同时创建的。请参阅代码片段:

我们无法弄清楚的是,如果这是正确的行为,或者我们在这里做错了什么


我们使用的shedlock版本是:1.1.0

您需要对“名称”列(主键)具有唯一的约束

我认为您需要数据库才能做到这一点。你当然可以这样做。它的实现是特定于数据库的,例如使用数据库索引来确保一次只有一个锁

服务A应该是这样的

@TryLock(name = "giveBonus", owner = "your-owner", lockFor = TWO_HOURS)
public void giveBonus() {
  //...
}

有关详细信息,请参阅。

我在“名称”列中添加了唯一约束,但仍然可以看到我的作业运行了两次。事实上,现在shedlock表中也没有创建条目。{2018-10-29T08:38:00.000840575Z 2018-10-29 08:38:00.000信息1-[TaskScheduler-5]c.n.s.p.a.s.fulfillipendingorders作业:完成待定订单2018-10-29T08:38:00.00086322Z 2018-10-29 08:38:00.000信息1-[TaskScheduler-4]c.n.s.p.a.s.s.s.s.s.s.s.s.s.fulfillipendingorders作业:完成待定订单}重启pods后,它会工作。谢谢。谢谢你的推荐,但现在我更感兴趣的是让Shedlock解决方案发挥作用。如果它根本不起作用,那么我会试试Dlock。