Spring 获取下一个 cron 计划的时间

问题描述 投票:0回答:1

我在 Spring Boot 中使用 @scheduled 实现了一个类,如下

@component
public class RunSchedule{
  @scheduled(cron="* * * 10 *")
     public void execute(){
        do something....
     }
}

我希望能够从代码中获取当前方法下一次执行的时间,这是可能的吗?

java spring-boot
1个回答
0
投票

将表达式作为应用程序属性,您可以在两个地方引用它。最终您可以找到下一次执行时间及其持续时间

import java.time.Duration;
import java.time.ZonedDateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.support.CronExpression;

public class RunSchedule {

    @Value("${run-schedule.expression}")
    private String expression;
    
    @Scheduled(cron="${run-schedule.expression}")
    public void execute(){
        CronExpression expression = CronExpression.parse(expression);
        ZonedDateTime now = ZonedDateTime.now();
        ZonedDateTime nextExecution = expression.next(now);

        final Duration duration = Duration.between(now.toInstant(), nextExecution.toInstant());

        System.out.println("Seconds: " + duration.getSeconds());
        System.out.println("Minutes: " + duration.toMinutes());
        System.out.println("Hours: " + duration.toHours());
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.