簡體   English   中英

是否可以為 @Scheduled 分配一個代表“從不”(在 Spring 中)的時間段?

[英]Is it possible to assign @Scheduled with a period representing "never" (in Spring)?

我正在調查以固定速率使用@Scheduled ,在某些可配置的情況下,不應運行預定的作業。

文檔沒有提到這一點,但fixedDelay()fixedDelayString()的默認值分別是-1"" 這些可以用來可靠地確保預定的方法不會觸發嗎?

你不能。 當您將fixedDelay屬性設置為-1或嘗試使用@Scheduled而不為其任何屬性指定有效值時,Spring會抱怨沒有設置任何屬性:

確切地說, 'cron''fixedDelay(String)''fixedRate(String)'屬性之一是必需的

您可以通過查看ScheduledAnnotationBeanPostProcessor#processScheduled的源代碼來驗證此行為。

它包含如下邏輯:

boolean processScheduled = false;

// ...

if (fixedRate >= 0) {
    Assert.isTrue(!processedSchedule, errorMessage);
    processedSchedule = true;
    this.registrar.addFixedRateTask(new IntervalTask(runnable, fixedRate, initialDelay));
}

// ...

Assert.isTrue(processedSchedule, errorMessage);

看一下這篇SO帖子 ,了解有條件禁用@Scheduled一些選項。

正如spring docs中提到的,您可以指定"-"來禁用任務的觸發:

CRON_DISABLED:表示禁用觸發器的特殊 cron 表達式值: "-"

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html#CRON_DISABLED

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM