问题标签 [shedlock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
236 浏览

spring-mvc - 基于xml的配置中的Spring ShedLock

我有一个遗留代码库,需要实现 Spring Shedlock 我发现了很多类似shedlock-spring 的文章,但我的调度程序已经用 xml 配置编写。

如何在 xml 中使用以下注释

  1. @EnableScheduling
  2. @EnableSchedulerLock(defaultLockAtMostFor = "1000")
  3. @Scheduled(fixedDelayString = "1000")
  4. @SchedulerLock(name = "scheduledTaskName", lockAtMostFor = "1000", lockAtLeastFor = "1000")

添加此注释时出现异常:

0 投票
0 回答
105 浏览

shedlock - Shedlock 没有调度任务

我正在尝试使用 Shedlock 在集群环境中运行计划任务。但是在我添加@EnableSchedulerLock 注释的那一刻,调度程序任务根本没有启动。

我看到我需要提供 LockProvider。我在集群环境中使用 Redis/Lettuce,但没有看到与生菜棚的集成。

有没有办法我仍然可以使用 Shedlock ?

我的 Maven 依赖项是:

主要的 Spring 应用程序是

计划任务类

0 投票
1 回答
99 浏览

java - shedlock 通过 lockname 获取锁定状态

我正在使用一个rest端点来启动一个使用executeWithLock的java进程,它接受一个LockingTaskExecutor.TaskWithResult(TaskWithResult的调用方法调用java进程/方法)。这工作正常,它只允许在任何时间点执行 java 进程,我可以从 TaskResult 获取执行状态。在某些情况下,java 进程运行时间很长,而当进程仍在执行时,其余调用会停止,

我试图让我的java进程@Async但是不管异步进程的执行如何都会释放锁并在异步进程完成之前解锁。

有没有办法通过名称获取锁定状态,以便在没有锁定的情况下我可以在单独的线程中调用 executeWithLock 并立即返回?如果它已经被锁定,我将跳过调用 executeWithLock 并立即返回。

或者对于这种情况还有其他解决方案吗?

0 投票
1 回答
325 浏览

spring-data-jpa - Spring Boot ShedLock“关系“shedlock”不存在”

我将 ShedLock 添加到我的项目中,以防止多次执行预定的工作。我像下面这样配置它,但我得到了

“org.postgresql.util.PSQLException:错误:关系“shedlock”不存在”错误。

这是 lockProviderBean:

这是预定的工作:

我将这些符号添加到包含 schduledJob 方法的类中:

我正在使用 Spring Data 进行数据库操作并使用以下属性:

0 投票
0 回答
56 浏览

java - 当 shedlock 出现异常时解锁

我正在使用 shedlock 在 node1 和 node2 上调度相同的作业。它工作正常,但我想在调度任务出错时解锁。

这是我的例子:

有没有手动解锁的方法?我怎样才能使这项工作?

感谢您的帮助。

0 投票
2 回答
327 浏览

spring - Shedlock 仅适用于一个实例,而不适用于多个实例

我想设置 Shedlock 来保护一个敏感进程,这样即使启动了多个应用程序进程,也只有一个进程实例运行。

在我的 pom.xml

我的数据库:

我的配置:

我的日程表:

症状:如果我只使用多个 SchedulerA 类(如 SchedulerB、SchedulerC 等)启动一个实例,这些类都是相同代码的副本,我可以看到 Shedlock 完成了它的工作,并且一次只允许一个 LOCAL 实例执行。但是,当我启动多个 Spring Boot 应用程序时,即使它们使用相同的数据库、相同的表、相同的调度程序名称,它们也会同时执行所有计划。我还注意到 DB 表中没有条目,但调试日志也没有显示任何错误。

问题:这是 Shedlock 的预期行为吗?我应该研究另一种解决方案还是我配置错误?

0 投票
0 回答
68 浏览

java - 在spring boot中重试计划方法失败

我在 Spring Boot 中有一个使用@scheduledshedlock的预定方法。如果在方法中发生处理失败,我希望 spring 重试该方法而不锁定它。如何使 spring boot 重试该方法可配置的次数?

0 投票
0 回答
91 浏览

java - Shedlock 未能向数据库表注册新的调度程序。- 抛出“任务未锁定。” 错误

我通过向 POM.XML 添加依赖项来配置 Shedlock,如下所示:

注册了bean:

添加调度程序:

问题是我没有看到使用此名称“elastic_reindex_scheduler”插入表(“scheduler_lock_vw”)的记录。行 - “LockAssert.assertLocked();” 抛出错误“计划任务 java.lang.IllegalStateException 发生意外错误:任务未锁定。

0 投票
0 回答
70 浏览

spring - 当应用程序在 Kubernetes pod 中复制时,在 Spring Boot 中同步 @Scheduled 方法

示例场景:我有两个 API(帐户 API 和向用户公开的 API),其中帐户 API 将为我提供一个帐户列表(大约最小大小为 500,并且在添加更多帐户时可能会增加)。我想根据过滤器获取帐户并将其他 API 中的数据公开给用户。

我正在使用 Spring @scheduled 来安排每 30 分钟获取帐户 API 的作业。

在单个 Pod 中,调度程序将轻松执行作业。

当应用程序被复制到 Kubernetes 中的三个 Pod 时,所有调度程序将同时唤醒,这是调度程序作业的重复。

预期行为:

我希望调度程序以同步的方式工作,如果一个调度程序正在处理一个帐户,另一个调度程序应该在下一个帐户上工作。基本上,我希望调度程序像多线程程序一样工作。

调度程序 1 处理 200 个帐户,调度程序 2 处理 200 个帐户,调度程序 3 处理 100 个帐户。

我是 Spring Boot 应用程序开发的新手,想知道是否可以完成上述操作。

我读到了 Shedlock,但它一次只能运行一个调度程序。但我喜欢使用所有调度程序并更快地处理帐户

0 投票
1 回答
53 浏览

spring - 没有数据库的 Spring ShedLock

我想使用配置 yml 属性禁用 ShedLock。因此,如果没有必要,我不必创建表锁。有没有办法禁用 Shedlock 的使用?

我试图删除 @Bean lockProvider 但后来我收到了这条消息:

没有“net.javacrumbs.shedlock.core.LockProvider”类型的合格 bean