Spring Scheduler 运行 时如何记录

How to log when Spring Scheduler will run

我正在为 spring 调度程序使用 cron 表达式,表达式的值由 spring bean 使用 spel 动态提供。

@Autowired
 private PurgeProperties purgeProperties;

@Scheduled(cron = "#{@purgeProperties.cronExpression}", zone = "#{@purgeProperties.zone}")
public void purgeData() throws UnknownHostException
{
           startPurge();
}

一切正常,唯一的问题是我想记录调度程序何时触发,因为 cron 表达式在运行时由另一个 bean 提供。所以只想知道正确的表达式是否将通过文件提供的内容映射到 属性 bean。

试试下面的代码

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.support.CronSequenceGenerator;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Date;

''''
''''
@PostConstruct
public void init() {
    CronSequenceGenerator cronTrigger = new CronSequenceGenerator(purgeProperties.cronExpression);
    Date next = cronTrigger.next(new Date());

    System.out.println("Next Execution Time: " + next);
}

CronSequenceGenerator 现已弃用。我用过这个:

CronExpression cronTrigger = CronExpression.parse(cronExpression);
var next = cronTrigger.next(LocalDateTime.now());
log.info("Next scheduled start planed at {}", next);