簡體   English   中英

有沒有辦法在spring boot中調度一個帶參數的函數

[英]Is there any way to schedule a function with parameters in spring boot

我想要一個函數將數據庫/模式的名稱作為輸入,並每 5 分鍾檢查一次數據庫是否處於活動狀態,然后將其記錄在不同的表中。 有點像監控數據庫

我有一個功能說重復

function repeat(String database_name) {
     //check database_name can be connected or not
}

當我用@scheduled 注釋它時如何在函數重復(如果不是參數)中傳遞值

對此的一種解決方案是創建一個表示參數的對象,並在 5 分鍾后執行該對象,獲取該對象並使用內部狀態作為參數的表示。 您必須確保每 5 分鍾執行一次 MyEventService 包含對 Event 的引用。 如果沒有對原始帖子的更多輸入,就不可能知道您是如何/何時這樣做的。

如果參數永遠不會改變,那么我建議使服務不可變,並刪除事件類,並僅通過使用 @Value 的屬性提供值。

class Event {

    private final String myString;

    // constructor, getter

}
@Service
public class MyEventService {

    private Event event;

    // constructor, setter, getter

}
class MyScheduledTask {

    @Autowired
    private MyEventService eventService;

    @Scheduled(fixedDelay = 300_000)
    public void execute() {
        Event event = eventService.getEvent();

        if (event == null) {
            throw new IllegalStateException("No event to process.");
        }
        // process event
    }
}

實際上@Scheduled需要參數。 使用參數fixedRate指定以毫秒為單位的間隔:

@Scheduled(fixedRate = 300000‬)
public void youFunction() {
}

將每 5 分鍾執行一次。

如果您需要在運行時通過方法參數指定間隔,請在此處查看我的答案: 是否可以手動調用彈簧調度方法

您可以使用TaskScheduler並通過以下方式手動安排任務

taskScheduler.schedule(task1, new PeriodicTrigger(5, TimeUnit.MINUTES));

其中5也可以是參數。

暫無
暫無

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

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