Проверка правильности выражения cron для задачи Spring - PullRequest
0 голосов
/ 23 апреля 2020

Я пишу запланированное задание, которое должно запускаться каждую первую субботу каждого месяца. Я придумал это:

@Scheduled(cron = "0 0 23 1-7 * SAT")
// Runs on 1st Saturday of each month at 23:00
public void CleanUpScheduledTask() {
}

Как я пришел к этому:

0 0 23 означает в 23:00 каждый день

1-7 * означает между 1-7 каждый месяц

SAT Суббота

Как вы предлагаете убедиться, что приведенное выше выражение верно? как я тестирую такие функциональные возможности?

Спасибо за помощь.

1 Ответ

0 голосов
/ 23 апреля 2020

1. Построение выражения Cron

Использование выражения задания Cron Spring

@Scheduled(cron = "[Seconds] [Minutes] [Hours] [Day of month] [Month] [Day of week] [Year]")

NB поле года необязательно

  • # используется для указания дня недели и недели, с которой должно начинаться задание.

    например, первая суббота каждого месяца (7#1)

  • ? не представляет определенного значения c и может использоваться в день месяца или поле дня недели

  • * представляет все значения

, следовательно, выражение cron становится

@Scheduled(cron = "0 0 23 ? * 7#1")

2. Тестирование задания Cron

  • использование Awaitility dependency

      <dependency>
         <groupId>org.awaitility</groupId>
         <artifactId>awaitility</artifactId>
         <scope>test</scope>
      </dependency>
    

-использование Spring Integration testing

@SpringJUnitConfig(CleanScheduler.class)
public class CleanSchedulerUnitTest {
    @Autowired
    private CleanScheduler cleanScheduler;

    @Test
    void cleanUpScheduledTaskShouldReturnSuccess() {
       //Act
        cleanScheduler.cleanUpScheduledTask();
      //Assertions
    }
}
...