2012-12-27 22 views
10

Próbuję zintegrować pracę kwarcu w mojej aplikacji wiosną. Mam ten przykład z here. W przykładzie pokazano zadania wykonywane w powtarzanych odstępach czasu przy użyciu simpletrigger iw określonym czasie przy użyciu crontrigger.Kwarc jednokrotny przy uruchamianiu aplikacji

Moim wymaganiem jest uruchomienie zadania tylko jeden raz podczas uruchamiania aplikacji. Usunąłem właściwość repeatInterval, ale aplikacja zgłasza wyjątek:

org.quartz.SchedulerException: Repeat Interval cannot be zero 

Czy istnieje jakiś sposób, aby zaplanować pracę tylko raz?

Dzięki ..

Odpowiedz

7

znaleźć odpowiedź here

ignorując repeatInterval i ustawienie repeatCount = 0 robi to, co chciałem.

1

Wiosna SimpleTriggerFactoryBean wykonuje zadanie: jeśli nie określisz czasu rozpoczęcia, ustawi go na "teraz".

Jednak uważam, że długotrwałe jednorazowe zadanie powinno być uważane za anty-wzór, ponieważ nie będzie działać nawet w klastrze z dwoma węzłami: jeśli węzeł, który uruchamia zadanie, nie będzie działał, nie będzie taki, który wznowiłby pracę.

Wolę mieć pracę, która powtarza się np. co godzinę, ale opatrzone komentarzem: @DisallowConcurrentExecution. W ten sposób zagwarantujesz, że dokładnie jedno zadanie zostanie uruchomione, zarówno gdy węzeł, który pierwotnie hostował zadanie, i po jego uruchomieniu.

Powiązane problemy