首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以使用Shedlock锁定API调用吗

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

Stack Overflow用户
提问于 2018-07-05 21:45:51
回答 3查看 1.4K关注 0票数 1

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

EN

回答 3

Stack Overflow用户

发布于 2018-07-16 05:50:52

你当然可以用dlock做到这一点。想象一下控制器A和服务A,其中控制器A调用服务A。如果你在服务A上有一个用dlock注释的方法doSomeWork,你可以安全地调用控制器A中的方法,只要你想要,并且它只会运行服务一次,直到超时。这里有一个具体的例子。

服务A应该是这样的。

代码语言:javascript
复制
@TryLock(name = "doSomeWork", owner = "serviceA", lockFor = ONE_MINUTE)
public void doSomeWork() {
  //...
}

控制器A应该是这样的。

代码语言:javascript
复制
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public void doSomeWork() {
  serviceA.doSomeWork();
}

有关详细信息,请参阅this post

票数 1
EN

Stack Overflow用户

发布于 2018-08-03 20:41:07

在API方法中,uou可以手动使用锁,如documentation中所述

代码语言:javascript
复制
LockingTaskExecutor executor // injected by Spring
...

Instant lockAtMostUntil = Instant.now().plusSeconds(600);
executor.executeWithLock(runnable, new LockConfiguration("lockName", lockAtMostUntil));
票数 0
EN

Stack Overflow用户

发布于 2019-01-11 20:39:03

您是否尝试过使用代理方法?

代码语言:javascript
复制
@EnableSchedulerLock(mode = PROXY_METHOD, defaultLockAtMostFor = "PT30S")

https://github.com/lukas-krecan/ShedLock#scheduled-method-proxy

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51192966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档