如何立即执行java Spring中的@Scheduled方法,然后根据cron?

How to execute a @Scheduled method in java Spring immediately and then according to cron?

我有一个方法:

@Scheduled(cron="0 */5 * * * *")
public void syncRoutine() { }

所以它 运行 每 5 分钟。

是否可以先安排一个方法到 运行 然后根据 cron?

您可以将多个 @Scheduled 注释与 @Schedules 注释组合:

@Schedules(value = {
        @Scheduled(initialDelay = 15_000,
                fixedDelay = Long.MAX_VALUE),
        @Scheduled(cron = "0 */5 * * * *")
})
public void scheduleFixedDelayTask() {
    System.out.println("Fixed delay task - " +
            System.currentTimeMillis() / 1000);
}

任务将在 initialDelay(15 秒)值后第一次执行。我们让 fixedDelay = Long.MAX_VALUE 无法重复,因为让 cron 来做。

OR

您可以同时使用 @PostConstruct@Scheduled 注释:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class ScheduleClass {

    @PostConstruct
    public void onStartup() {
        scheduleFixedDelayTask();
    }

    @Scheduled(cron = "0 */1 * * * *")
    public void scheduleFixedDelayTask() {
        System.out.println("Fixed delay task - " +
                System.currentTimeMillis() / 1000);
    }
}

通常情况下,您不需要为每 5 分钟 运行 的任务添加 cron,但我假设这是一个示例。