[英]ShedLock not lock when Sleuth is present
有一個應用程序通過調度程序運行某個進程,就像我們有多個實例一樣,我們選擇shedlock來阻止其他運行相同的進程。 但是,由於sleuth提供了一個 Runnable 實例,它是 TraceRunnable 並且預期是 ScheduledMethodRunnable,所以它不起作用。 有什么想法可以解決這個問題嗎?
class SpringLockConfigurationExtractor
@Override
public Optional<LockConfiguration> getLockConfiguration(Runnable task) {
if (task instanceof ScheduledMethodRunnable) {
ScheduledMethodRunnable scheduledMethodRunnable = (ScheduledMethodRunnable) task;
return getLockConfiguration(scheduledMethodRunnable.getTarget(), scheduledMethodRunnable.getMethod());
} else {
logger.debug("Unknown task type " + task);
}
return Optional.empty();
}
我與開發人員交談並按照文檔將 param interceptMode 設置為PROXY_METHOD及其工作。 他提到這將是未來版本中的默認值,有利於避免此類問題。
@EnableSchedulerLock(defaultLockAtMostFor = "PT5M", interceptMode = PROXY_METHOD)
您必須提供自己的SchedulerProxyScheduledLockAdvisor
實現來驗證任務的 class 是否是TraceRunnable
。 如有必要,您還可以禁用部分 Sleuth。 你也可以向 Shedlock 的作者索取一些鈎子來解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.