Spring 如何在春季的准确时间运行@Scheduled job一次?

Spring 如何在春季的准确时间运行@Scheduled job一次?,spring,spring-boot,cron,Spring,Spring Boot,Cron,假设我想在2020年2月6日13:50运行一次作业。我该怎么做 通过使用下面的表达式,我可以确定它将在今天13:50运行。但它也将在明年运行。但我只想让它运行一次 @Scheduled(cron = "0 50 13 6 2 ?") 如果您最后添加年份,它将只执行一次 @Scheduled(cron = "0 50 13 6 2 ? 2020") 这是解决方案的一个变通方法。只需按原样使用计划注释,但使用日期。就是 String targetDate="2020-02-06 13:5

假设我想在2020年2月6日13:50运行一次作业。我该怎么做

通过使用下面的表达式,我可以确定它将在今天13:50运行。但它也将在明年运行。但我只想让它运行一次

@Scheduled(cron = "0 50 13 6 2 ?")

如果您最后添加年份,它将只执行一次

@Scheduled(cron = "0 50 13 6 2 ? 2020")

这是解决方案的一个变通方法。只需按原样使用计划注释,但使用日期。就是

    String targetDate="2020-02-06 13:50:00";
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(targetDate);
    if(new Date().getTime()==date.getTime())
    {
      then put your logic here.
   }
编辑->仅检查年份就足够了。所以你可以这样做

@Scheduled(cron = "0 50 13 6 2 ?")
public void doTheJobForOnceInSpecificTime() {
    if (Year.now().getValue() == 2020) {
        //your logic
    }
}

`如果只需要运行cron作业,为什么需要它once@salsinga如何确保此作业将在2020年2月6日13:50运行?请参见否。它将在启动时引发非法状态异常。“Cron表达式必须由6个字段组成(在“0 52 13 6 2?2020”中找到7个字段)”,感谢您的回答。但我认为在if语句中几乎不可能得到完全相同的时间。因此,仅比较一年就足够了。如果你同意我的意见,你可以考虑编辑答案,然后我可以接受。是的,比较年份应该足够了。