我正在开发一个定期执行多个作业的调度项目。 我正在使用cron调度,如下例所示。工作成功执行没有问题。 但是对于一个要求,我想计算并保持DB中预定作业的下一个运行时间。 是否有解决方案可以获得下面配置的下一次和之前的作业点火时间?
示例配置:
import java.util.Date;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class DemoServiceBasicUsageCron
{
@Scheduled(cron="1,3,30,32 * * * * ?")
public void demoServiceMethod()
{
System.out.println("Curent date time is - "+ new Date());
}
}
答案 0 :(得分:5)
您可以使用CronSequenceGenerator
。
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;
@Component
public class MyJob {
public static final String CRON_EXPRESSION = "0 0 5 * * *";
@PostConstruct
public void init() {
CronSequenceGenerator cronTrigger = new CronSequenceGenerator(CRON_EXPRESSION);
Date next = cronTrigger.next(new Date());
System.out.println("Next Execution Time: " + next);
}
@Scheduled(cron = CRON_EXPRESSION)
public void run() {
// Your custom code here
}
}
答案 1 :(得分:0)
我希望你使用的是Quartz。你可以尝试这样的事情。
CronExpression exp = new CronExpression("1,3,30,32 * * * * ?");
exp.getNextValidTimeAfter(new Date());