Cron表达:从现在开始,每周二和周三运行

时间:2019-02-19 15:53:33

标签: java spring cron

我需要具有Cron知识的人一些帮助。我正在尝试编写Cron表达式,该表达式应该在星期二每周运行一次,如果今天是星期二,则从星期三开始运行一次。我当前的解决方案是:

0 0 * * 2,3

此表达式在星期二和星期三的00:00运行Cron。 但是如果今天是星期二,它将无法运行,因为时间早于00:00。如果我将时间设置为当前小时和分钟,比如说16:30,那么Cron将从现在的星期二开始,但是随后的星期三也将从16:30开始。我想尽快开始所有下一次Сron事件,即在周三的00:00

是否有可能完全解决此任务?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

似乎您想在每个TUE和WED的午夜运行作业,并且还想在应用程序从TUE或WED启动时立即运行。不知道并且从未听说过的cron表达式可以处理“立即启动”的行为。但是您可以简单地使用@PostConstruct来实现它:

public class CronJob {

    @PostConstruct
    public void onStart() {
       LocalDateTime now =LocalDateTime.now();
       if(now.getDayOfWeek() == DayOfWeek.TUESDAY || now.getDayOfWeek() == DayOfWeek.WEDNESDAY  ) {
            if(!now.toLocalTime().equals(LocalTime.MIDNIGHT)) {
                 doJob();
            }
        }

    }

    @Scheduled(cron="0 0 * * 2,3")
    public void onSchedule() {
         doJob();
    }

    public void doJob(){
        //do the job
    }
}

答案 1 :(得分:1)

您可以实现以下类型的三重cron:

* * * * 2 [ ! -e "$HOME/cronflag2" ] && touch "$HOME/cronflag2" && command 
* * * * 3 [ ! -e "$HOME/cronflag3" ] && touch "$HOME/cronflag3" && command
0 0 * * 4 rm "$HOME/cronflag2" "$HOME/cronflag3"

只有标志文件不可用时,才会执行第一个命令。如果不可用,它将执行并执行命令。