我在 Spring Boot 中使用 @scheduled 实现了一个类,如下
@component
public class RunSchedule{
@scheduled(cron="* * * 10 *")
public void execute(){
do something....
}
}
我希望能够从代码中获取当前方法下一次执行的时间,这是可能的吗?
将表达式作为应用程序属性,您可以在两个地方引用它。最终您可以找到下一次执行时间及其持续时间
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());
}
}