2013-01-15 21 views
5

Pracuję nad projektem z Quartz i był problem z zależnościami z zadaniami.Zależność zadań kwarcu

mamy konfigurację gdzie A i B są niezależne od siebie, choć C:

A i B mogą działać w tym samym czasie, ale C można uruchomić tylko wtedy, gdy A i B są kompletne.

Czy istnieje sposób na ustawienie tego rodzaju scenariusza w Kwarcu, aby C zadziałało tylko po zakończeniu A i B?

Odpowiedz

5

myślę, że to jest obecny sposób to zrobić: http://www.quartz-scheduler.org/documentation/faq#FAQ-chain

Na podstawie tego FAQ, można utworzyć słuchacza pracy, która czeka na A i B do końca, a następnie zaplanować zadania C raz tak się dzieje.

PS: Poniżej znajduje się tekst w przypadku zmiany linku:

Jak mogę łańcucha wykonanie pracy? Lub w jaki sposób utworzyć przepływ pracy?

Obecnie nie ma "bezpośredniego" ani "wolnego" sposobu wyzwalania łańcucha za pomocą kwarcu. Istnieje jednak kilka sposobów na to, aby osiągnąć to bez większego wysiłku. Poniżej znajduje się zarys kilku podejść:

Jednym ze sposobów jest użycie detektora (tj. TriggerListener, JobListener lub SchedulerListener), który może zauważyć zakończenie zadania/wyzwalacza, a następnie natychmiast zaplanować uruchomienie nowego wyzwalacza. Takie podejście może być nieco zaangażowane, ponieważ będziesz musiał poinformować słuchacza, za którym zleceniem podążasz, i być może będziesz musiał się martwić o trwałość tych informacji. Zobacz listener org.quartz.listeners.JobChainingJobListener, który jest dostarczany z Quartz - ponieważ ma już niektóre z tych funkcji.

Innym sposobem jest zbudowanie zadania, które zawiera w swojej JobDataMap nazwę następnego zadania do uruchomienia, a po zakończeniu zadania (ostatni krok w jego metodzie wykonywania) ma harmonogram zadań dla następnego zadania. Kilka osób robi to i ma szczęście. Większość stworzyła klasę podstawową (abstrakcyjną), która jest zadaniem, które wie, jak pobrać nazwę zadania i grupę z JobDataMap za pomocą predefiniowanych kluczy (stałych) i zawiera kod do zaplanowania zidentyfikowanego zadania. Ta abstrakcyjna implementacja zadania execute() deleguje do abstrakcyjnej metody szablonów, takiej jak "doWork()" (gdzie idzie prawdziwa praca rozszerzającej klasy Job), a następnie zawiera kod do planowania zadania uzupełniającego. Następnie po prostu tworzą rozszerzenia tej klasy, które obejmowały pracę, którą powinna wykonać praca. Użycie zadań "trwałych" lub przeładowana metoda addJob (JobDetail, boolean, boolean) (dodana w Quartz 2.2) pomaga aplikacji zdefiniować wszystkie zadania jednocześnie z ich właściwymi danymi, nie powodując jeszcze wyzwalaczy ich uruchomienia (innych niż jeden przycisk uruchamiający pierwszą pracę w łańcuchu).

W przyszłości, Quartz zapewni znacznie czystszy sposób, aby to zrobić, ale do tego czasu będziesz musiał zastosować jedno z powyższych podejść lub wymyślić jeszcze jeden, który działa lepiej dla ciebie.