Spring 我们可以使用Shedlock来锁定API调用吗

Spring 我们可以使用Shedlock来锁定API调用吗,spring,rest,api,locking,spring-scheduled,Spring,Rest,Api,Locking,Spring Scheduled,在我们的项目中,我们使用ShedLock来防止计划的Spring任务的并发执行。有时我们需要手动调用此任务,因此我们在前端添加了一个按钮,单击该按钮将调用(API)此任务。现在,我们可以使用ShedLock,这样当用户多次单击按钮时,它将只执行一次任务并锁定,直到任务完成。您当然可以使用。想象一下控制器A和服务A,其中控制器A调用服务A。如果您在服务A上有一个由dlock注释的方法doSomeWork,您可以从控制器A安全地调用任意数量的方法,并且它将只运行服务一次,直到超时。这里有一个具体的例

在我们的项目中,我们使用ShedLock来防止计划的Spring任务的并发执行。有时我们需要手动调用此任务,因此我们在前端添加了一个按钮,单击该按钮将调用(API)此任务。现在,我们可以使用ShedLock,这样当用户多次单击按钮时,它将只执行一次任务并锁定,直到任务完成。

您当然可以使用。想象一下控制器A和服务A,其中控制器A调用服务A。如果您在服务A上有一个由dlock注释的方法
doSomeWork
,您可以从控制器A安全地调用任意数量的方法,并且它将只运行服务一次,直到超时。这里有一个具体的例子

服务A应该是这样的

@TryLock(name = "doSomeWork", owner = "serviceA", lockFor = ONE_MINUTE)
public void doSomeWork() {
  //...
}
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public void doSomeWork() {
  serviceA.doSomeWork();
}
控制器A应该是这样的

@TryLock(name = "doSomeWork", owner = "serviceA", lockFor = ONE_MINUTE)
public void doSomeWork() {
  //...
}
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public void doSomeWork() {
  serviceA.doSomeWork();
}

有关更多信息,请参阅。

通过API方法,uou可以按照中的说明手动使用锁


您是否尝试使用代理方法

@EnableSchedulerLock(mode = PROXY_METHOD, defaultLockAtMostFor = "PT30S")