java - 如何理解 shedlock 何时被获取和释放?
问题描述
我有这样的代码:
private final ThreadPoolTaskScheduler threadPoolTaskScheduler; // spring
private final LockingTaskExecutor lockingTaskExecutor; // shedlock
....
threadPoolTaskScheduler.scheduleWithFixedDelay(
() -> {
lockConfiguration = ...
long start = System.currentTimeMillis();
LOGGER.info("Spring scheduler started task, awaiting shedlock ");
lockingTaskExecutor.executeWithLock((Runnable) () -> {
LOGGER.info("Shedlock acquired. duration=[{}]ms", propertyItem, System.currentTimeMillis() - start);
taks();
},
lockConfiguration);
}, someInterval);
我有 2 个节点。根据日志,我看到task()
仅在第一个节点上有效的情况。在第二个节点上我只看到Spring scheduler started task, awaiting shedlock
我认为它不应该以这种方式工作,我想调查它为什么会发生。
锁定释放时如何订阅事件?
shedlock 尝试获取锁多长时间?
附言
someInterval = 30 分钟
lockConfiguration: atleast = 5 min, atMost=20min
解决方案
我调查了源代码,发现 shedlock 试图获取锁,如果锁忙它只是跳过任务
推荐阅读
- vue.js - 为什么我的 Vue 转换在构建后不起作用?
- scala - spark - 如何有效地从所有选择的列都包含空值的数据框中删除行?
- angular - this.debug 不是 Angular Universal 的函数
- docker - Github Action 将 docker 容器部署到服务器
- django - 如何使用本地 yml 模式文件将 Redoc 文档添加到 Django?
- .net-core - .NET CORE - 当请求的凭据模式为“包含”时,响应中的“Access-Control-Allow-Origin”标头不能是通配符“*”
- css - @media (prefers-color-scheme: light) 在 chrome 中不起作用
- java - 如何为自定义 api 错误消息解决此错误。如果我删除了此类的两个方法,则项目运行没有错误
- jquery - 将模型传递给 jQuery
- reactjs - “是的”验证库无法在 TypeScript 中编译