Как выполнить задание @Scheduled в точное время один раз весной? - PullRequest
0 голосов
/ 06 февраля 2020

Допустим, я хочу запустить работу один раз в 06.02.2020 13:50. Как я могу это сделать?

Используя приведенное ниже выражение, я могу достичь того, что оно будет работать сегодня в 13:50. Но он будет запущен и в следующем году. Но я хочу, чтобы это запускалось только один раз.

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

Ответы [ 2 ]

0 голосов
/ 06 февраля 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.
   }

edit -> Достаточно просто проверить год. Так что вы можете сделать это.

@Scheduled(cron = "0 50 13 6 2 ?")
public void doTheJobForOnceInSpecificTime() {
    if (Year.now().getValue() == 2020) {
        //your logic
    }
}
0 голосов
/ 06 февраля 2020

если вы добавите год, он будет выполнен только один раз.

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