Zadania cykliczne
Podsumowanie:Funkcja zadań cyklicznych służy do okresowego wykonywania akcji zgodnie ze zdefiniowanym wyrażeniem Cron. W zadaniach cyklicznych można używać akcji następujących typów:
- SQL do bazy systemowej,
- Wysyłka e-mail,
- Zapytania do Webserwisów,
- Algorytm C#,
- Importowanie dokumentów.
☛ AdminSPA >
INTEGRACJE
>Zadania cykliczne
>Lista...
/Historia...
Definiowanie zadania cyklicznego
Aby dodać nowe zadanie cykliczne, kliknij kolejno INTEGRACJE
> Zadania cykliczne
> Lista zadań cyklicznych
, a następnie kliknij przycisk Nowe zadanie
w lewym górnym rogu. Zostanie wyświetlone okno dialogowe Nowe zadanie cykliczne
.
W tym oknie określ następujące ustawienia:
-
Aplikacja
: nazwa aplikacji, do której zostanie przypisany tworzony obiekt; wszystkie obiekty przypisane do aplikacji można wraz z nią wyeksportować, używając poleceniaMigrator aplikacji
w sekcjiADMINISTRACJA
menu głównego. -
Moduł
: nazwa modułu aplikacji, do którego zostanie przypisany tworzony obiekt. -
Kod
: kod zadania cyklicznego. -
Nazwa
: nazwa zadania cyklicznego. -
Aktywne
: określa, czy dla zadania ma się rozpocząć odliczanie czasu do wykonania zadania zgodnie z wyrażeniem cron. -
Cron
: wyrażenie definiujące interwał wykonania zadania cyklicznego; szczegóły poniżej. -
Typ akcji
: wybierz typ akcji; dostępne wartości:Akcja SQL
Akcja Email
Akcja WebService
Akcja Algorytm C#
Akcja importu dokumentów
-
Wybrana akcja
: wybierz akcję do wykonania w ramach zadania cyklicznego; dostępne są tylko akcje globalne.
Dla zdefiniowanych zadań cyklicznych rejestrowana jest wspólna historia wykonania (INTEGRACJE
> Zadania cykliczne
> Historia wykonania zadań
). Utworzenie nowego aktywnego zadania oraz zmiana stanu z nieaktywnego na aktywne powoduje utworzenie w historii wpisu ze statusem Dodano do harmonogramu (rozpoczęcie odliczania interwału cron). Zmiana stanu z aktywnego na nieaktywne, a także usunięcie zadania skutkuje wpisem Usunięto z harmonogramu. W przypadku aktualizacja zadania odliczanie interwału cron jest resetowane (wpis o usunięciu, a następnie dodaniu). Ponadto rejestrowane są statusy Rozpoczęto (rozpoczęcie wykonywania zadania), Zakończono (zakończenie wykonywania zadania) oraz Błąd. W tym ostatnim przypadku rejestrowane są szczegóły wystąpienia błędu.
Definiowanie harmonogramu
Harmonogramy definiuje się w formie specjalnych wyrażeń składających się z siedmiu pól, które rozdziela się znakiem spacji i które reprezentują (od lewej):
- sekundy
- minuty
- godziny
- dzień miesiąca
- miesiąca
- dzień tygodnia
- rok (opcjonalnie)
Na przykład wyrażenie 0 0 12 ? * WED
oznacza „w każdą środę o godzinie 12.”.
W poszczególnych polach można wpisywać:
- pojedyncze wartości, np.
WED
, jak w powyższym przykładzie) - listy wartości, tj. kilka wartości oddzielonych przecinkami, np.
"MON, WED, SAT"
(„w poniedziałek, środę i sobotę”) - zakresy wartości, np.
"MON-WED"
(„od poniedziałku do środy”)
Możliwe jest także używanie zakresów na listach, np. "MON-WED, SAT"
(„od poniedziałku do środy i w soboty”).
Znak wieloznaczny *
oznacza dowolną możliwą wartość dla danego pola. Gwiazdka w polu miesiąca oznacza „w każdym miesiącu”, a w polu dnia tygodnia oznacza „w każdym dniu tygodnia”.
Wszystkie pola mają zestaw obsługiwanych wartości. Dla sekund i minut są to liczby od 0 do 59 dla sekund i minut, dla godzin liczby od 0 do 23 dla godzin. W polu dnia miesiąca można wpisać dowolną liczbę od 0 do 31 (pamiętając o liczbie dni w danym miesiącu). Miesiące można określać liczbowo od 0 do 11 lub skrótami tekstowymi JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV i DEC. Dni tygodnia można określać liczbami od 1 do 7 (1 oznacza niedzielę) lub skrótami SUN, MON, TUE, WED, THU, FRI i SAT.
Znak /
oznacza przyrosty wartości. Na przykład wpisanie 0/15
w polu minut będzie oznaczało „co kwadrans od minuty 0”, natomiast wartość 3/20
w tym polu oznacza „co dwadzieścia minut, poczynając od 3. minuty” (to samo, co wpisanie 3, 23, 43
).
W pola dnia miesiąca i dnia tygodnia można używać pytajnika (?
), który oznacza „brak określonej wartości”. Przydaje się to w przypadku konfigurowania harmonogramu z użyciem tylko niektórych pól. W tych polach można także używać litery L
, która oznacza ostatni (ang. Last) dzień miesiąca (31 stycznia, ale 28 lutego) lub ostatni dzień tygodnia (7
lub SAT
). Jednak użycie tej litery wraz z określeniem dnia tygodnia, np. FRIL
(lub 6L
), będzie oznaczało ostatni taki dzień tygodnia w miesiącu, czyli w tym przykładzie „ostatni piątek miesiąca”. Z opcją L
nie można używać zakresów ani list.
Litera W
oznacza dzień roboczy (ang. Weekday) przypadający najbliżej podanego dnia miesiąca. Na przykład 15W
oznacza „najbliższy dzień roboczy po 15 dniu miesiąca”.
Symbol #
jest używany w polu dnia tygodnia służy do określania kolejnego dnia tygodnia w miesiącu. Na przykład FRI#3
(lub 6#3
) oznacza „trzeci piątek miesiąca”.
Jako pomocy w konstrukcji wyrażeń cron można użyć generatora online: https://www.freeformatter.com/cron-expression-generator-quartz.html.
Przykłady
-
0 0/5 * * * ?
: co pięć minut -
10 0/5 * * * ?
: co pięć minut, zaczynając od 10 sekundy po każdej pełnej godzinie (np. 10:00:10, 10:05:10 itp.) -
0 30 10-13 ? * WED,FRI
: o godzinie 10:30, 11:30, 12:30 i 13:30 w każdą środę i piątek. -
0 0/30 8-9 5,20 * ?
: co pół godziny między 8:00 i 10:00 w każdy 5. i 20. dzień miesiąca; NIE obejmuje godziny 10:30, tylko 8:00, 8:30, 9:00 i 9:30.
Konfiguracja modułu Quartz
Za uruchamianie zadań cyklicznych odpowiada moduł Quartz w serwisie TaskService. W pliku appsettings.json serwisu TaskService znajduje się sekcja Quartz (domyślne wpisy przedstawiono poniżej), w której można dopisywać odpowiednie ustawienia konfiguracyjne. Dokumentację dostępnych opcji konfiguracji można znaleźć pod adresem https://www.quartz-scheduler.net/documentation/quartz-3.x/configuration/reference.html.
"Quartz": {
"quartz.threadPool.threadCount": "10"
}
To ustawienie określa liczbę wątków w puli, do której wysyłane są instrukcje uruchamiania zadań cyklicznych. W przypadku, kiedy przydzielona liczba będzie zbyt mała na obsłużenie zaplanowanych zadań, może dojść do sytuacji, że indywidualna iteracja zadania cyklicznego nie zostanie wykonana. Moduł Quartz obsługuje tę sytuacją w taki sposób, że po upływie zadanego czasu (ustawienie quartz.jobStore.misfireThreshold, domyślnie 60 000 ms) ponowi próbę wykonania takiego zadania.