Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

cron4j 2.2 uputstvo

1. Quickstart

Glavni entitet cron4j-a je planer. Sa it.sauronsoftware.cron4j.Scheduler primerom možete da izvršite zadatke u fiksnim trenucima, tokom cele godine. Planer može izvršiti zadatak jednom u minutu, jednom u pet minuta, petkom u 10:00, 16. februara u 12:30 časova, ali samo ako je subota, i tako dalje.

Upotreba cron4j planera je operacija u četiri koraka:

  1. Napravite svoju Scheduler instancu.
  2. Rasporedite svoje postupke. Za zakazivanje akcija morate da kažete planeru šta treba da uradi i kada. Možete da odredite šta, koristeći java.lang.Runnable ili it.sauronsoftware.cron4j.Task instancu, a možete da odredite kada koristeći obrazac za zakazivanje, koji se može predstaviti nizom ili sa it.sauronsoftware.cron4j.SchedulingPattern primerom.
  3. Pokreće se planer.
  4. Zaustavlja se planer, kada vam ne treba više.

Uzmite u obzir ovaj jednostavan primer:

import it.sauronsoftware.cron4j.Scheduler;

public class Quickstart {

	public static void main(String[] args) {
		// Creates a Scheduler instance.
		Scheduler s = new Scheduler();
		// Schedule a once-a-minute task.
		s.schedule("* * * * *", new Runnable() {
			public void run() {
				System.out.println("Another minute ticked away...");
			}
		});
		// Starts the scheduler.
		s.start();
		// Will run for ten minutes.
		try {
			Thread.sleep(1000L * 60L * 10L);
		} catch (InterruptedException e) {
			;
		}
		// Stops the scheduler.
		s.stop();
	}

}

Ovaj primer radi deset minuta. Na promenu na svaki minut će odštampati tužnu (ali istinitu) poruku "Još jedan minut je otkucao ..."

Neki drugi ključni koncepti:

  • Možete da isplanirate koliko god zadataka želite.
  • Možete da zakažete zadatak kada želite, takođe pošto je Planer počeo da radi.
  • Možete promeniti obrazac zakazivanja već planiranog zadatka, takođe dok planer radi (operacija reprogramiranja).
  • Možete ukloniti prethodno planirani zadatak, dok takođe planer radi (deschedule operacija).
  • Možete da pokrenete i zaustavite planer koliko god puta želite.
  • Možete da zakažete i iz fajla.
  • Možete zakazati iz bilo kog izvora koji želite.
  • Možete snabdevati slušaoce za zakazivanje, kako bi primali događaje o izvršenom zadatku.
  • Možete da kontrolišete sve tekuće zadatke.
  • Možete ručno pokrenuti zadatak, bez korišćenja obrasca rasporeda.
  • Možete da promenite planerovu radnu vremensku zonu.
  • Možete da potvrdite svoje obrasce zakazivanja pre njihove upotrebe sa planerom.
  • Možete predvideti kada će obrazac zakazivanja izazvati izvršenje zadatka.

2. Obrasci zakazivanja

UNIX crontab-like pattern je niz podeljen u pet odvojenih delova prostora. Svaki deo je namenjen kao:

  1. Minutes sub-pattern. Za vreme kojih minuta sata je trebalo da zadatak bude pokrenut? Opseg vrednosti je od 0 do 59.
  2. Hours sub-pattern. Tokom kojih sati dnevno je trebalo da zadatak bude pokrenut? Opseg vrednosti je od 0 do 23.
  3. Days of month sub-pattern. Tokom kojih dana u mesecu je trebalo da zadatak bude pokrenut? Vrednosti se kreću od 1 do 31. Posebna vrednost "L" može da se koristi za prepoznavanje poslednjeg dana meseca.
  4. Months sub-pattern. Tokom kojih meseci u toku godine treba da zadatak bude pokrenut? Raspon vrednosti je od 1 (januar) do 12 (decembar), inače ovaj pod-obrazac omogućava pseudonime "jan", "feb", "mar", "apr", "may", "jun", "jul" , "aug", "sep", "oct", "nov" i "dec".
  5. Days of week sub-pattern. Za vreme kojih dana u nedelji treba zadatak da bude pokrenut? Vrednosni opseg je od 0 (nedelja) do 6 (subota), u suprotnom ovaj pod-obrazac omogućava pseudonime "sun", "mon", "tue", "wed", "thu", "fri" i "sat".

Star wildcart karakter je takođe priznat, ukazujući na "svaki minut sata", "na svaki sat u toku dana", "Svaki dan u mesecu", "Svaki mesec u godini" i "svaki dan u nedelji", prema sub-pattern-u u kom se koristi.

Kada je planer počeo, zadatak će biti pokrenut kada pet delova u svom obrascu rasporeda budu tačni u isto vreme.

Paterni rasporeda će biti predstavljeni sa it.sauronsoftware.cron4jSchedulingPattern instancom. Nevažeći obrasci zakazivanja su uzrok it.sauronsoftware.cron4j.InvalidPatternExceptions-a. SchedulingPattern klasa nudi i statički validate(String) metod, koji se može koristiti za proveru niza pre nego što ga koristite kao obrazac zakazivanja.

Neki primeri:

5 ****
Ovaj obrazac prouzrokuje da zadatak bude pokrenut na svakih sat vremena, na početku petog minuta (00:05, 01:05, 02:05, itd).

*****
Ovaj obrazac dovodi zadatak da bude pokrenut svakog minuta.

* 12 ** Mon
Ovaj obrazac dovodi zadatak da bude pokrenut svakog minuta tokom 12 sati ponedeljka.

* 12 16 * Mon (Pon)
Ovaj obrazac dovodi zadatak da bude pokrenut svakog minuta tokom 12 sati u ponedeljak, 16-i, ali samo ako je dan 16. u mesecu.

Svaki pod-obrazac može da sadrži dve ili više vrednosti razdvojene zarezima.

59 11 ** 1,2,3,4,5
Ovaj obrazac dovodi zadatak da bude pokrenut u 11:59 pm u ponedeljak, utorak, sredu, četvrtak i petak.

Vrednosni intervali su definisani korišćenjem znaka minus.

59 11 ** 1-5
Ovaj obrazac je ekvivalentan prethodnom.

Crtica karakter može da se koristi za identifikaciju vrednosti koraka u opsegu. Može se koristiti i u vidu */c i a-b/c. Subpattern je uparen sa svim c vrednostima u opsegu 0, maxvalue ili a-b.

* /5 ****
Ovaj obrazac dovodi zadatak da bude pokrenut na svakih 5 minuta (0:00, 0:05, 0:10, 0:15 i tako dalje).

3-18/5 ****
Ovaj obrazac dovodi zadatak da bude pokrenut na svakih 5 minuta počev od trećeg minuta u satu, do 18. (0:03, 0:08, 0:13 , 0:18, 1:03, 1:08 i tako dalje)

* / 15 9-17 ***
Ovaj obrazac dovodi zadatak da bude pokrenut na svakih 15 minuta između 9 h i 17 h doba dana , (9:00, 9:15, 9:30, 9:45 i tako dalje ... napomena da je poslednje izvršenje u 17:45). Sva sveže

opisana pravila sintakse mogu se koristiti zajedno.

* 12 * 10-16/2 * *
Ovaj obrazac dovodi zadatak da bude pokrenut svakog minuta tokom 12-og sata dana, ali samo ako je dan 10., 12., 14. ili 16. u mesecu.

* 12 1-15,17,20-25 **
Ovaj obrazac dovodi zadatak da bude pokrenut svakog minuta tokom 12-og sata dana, ali dan u mesecu mora da bude između 1. i 15., 20. i 25., ili bar to mora biti 17.

Konačno cron4j vam omogućava da kombinujete više obrazaca zakazivanja u jedan, sa cevnim karakterom:

0 5 *** | 8 *** 10 | 22 17 ***
Ovaj obrazac dovodi zadatak da bude pokrenut svaki dan u 05:00, 10 : 08 i 17:22.

3. Kako da isplanirate, reprogramirate i deschedule-irate zadatak

Najjednostavniji način da se izgradi zadatak je da sprovedete poznati java.lang.Runnable interfejs. Kada je zadatak spreman, može se zakazati sa it.sauronsoftware.cron4j.Scheduler. schedule(String, Runnable) metodom.Ovaj metod izbacuje it.sauronsoftware.cron4j.InvalidPatternException kada isporučeni niz znakova ne predstavlja važeći obrazac rasporeda.

Drugi način da se izgradi zadatak je da se produži it.sauronsoftware.cron4j.Task apstraktna klasa, koja je moćnija i dozvolite programeru pristup nekim drugim cron4j funkcijama. Ovo je bolje opisano u " Izgradnja sopstvenog zadatka" - "Building your own task” paragrafu. Instance zadataka mogu biti zakazane u schedule(String, Task) i schedule(SchedulingPattern, Task) metodama.

Metode rasporeda raspoložive u planeru uvek vrate ID korišćen za prepoznavanje i preuzimanje zakazane operacije. Ovaj broj se može kasnije koristiti za reprogramiranje zadatka (menjajući njegov obrazac rasporeda) sa reschedule(String, String) ili reschedule(String, SchedulingPattern) metodama, i da se deschedule-uje zadatak (uklonite zadatak iz planera) sa deschedule(String) metodom.

Isti broj može da se koristi za preuzimanje obrazaca raspoređivanja u vezi sa planiranim zadatkom, sa getSchedulingPattern(String) metodom, ili za preuzimanje samog zadatka, sa getTask(String) metodom.

4 . Kako da isplanirate neki sistemski proces

Sistemski procesi mogu biti lako zakazani korišćenjem ProcessTask klase:

ProcessTask task = new ProcessTask("C:\\Windows\\System32\\notepad.exe");
Scheduler scheduler = new Scheduler();
scheduler.schedule("* * * * *", task);
scheduler.start();
// ... 

Argumenti za proces se mogu dobiti korišćenjem string niza umesto jedinstvene komande žica:

String[] command = { "C:\\Windows\\System32\\notepad.exe", "C:\\File.txt" };
ProcessTask task = new ProcessTask(command);
// ...

Promenljive okruženja za proces mogu da se isporučuju koristeći drugi string niz, čiji elementi moraju biti u IME = VREDNOST obliku:

String[] command = { "C:\\tomcat\\bin\\catalina.bat", "start" };
String[] envs = { "CATALINA_HOME=C:\\tomcat", "JAVA_HOME=C:\\jdks\\jdk5" };
ProcessTask task = new ProcessTask(command, envs);
// ...

Podrazumevani radni direktorijum za proces može se menjati koristeći treći parametar u konstruktoru:

String[] command = { "C:\\tomcat\\bin\\catalina.bat", "start" };
String[] envs = { "CATALINA_HOME=C:\\tomcat", "JAVA_HOME=C:\\jdks\\jdk5" };
File directory = "C:\\MyDirectory";
ProcessTask task = new ProcessTask(command, envs, directory);
// ...

Ako želite da promenite podrazumevani radni direktorijum, ali nemate nijednu promenljivu okruženja, envs parametar konstruktora može da se podesi na nulu:

ProcessTask task = new ProcessTask(command, null, directory);

Kada je envs nula, proces nasleđuje sve promenljive okruženja sadašnjeg JVM:

Promenljive okruženja i radni direktorijum mogu se podesiti pozivajući setEnvs(String[]) i setDirectory(java.io. File) metode.

Standardni output procesa i standardni kanali grešaka mogu biti preusmereni na datoteke pomoću setStdoutFile(java.io.File) i setStderrFile(java.io.File) metoda:

ProcessTask task = new ProcessTask(command, envs, directory);
task.setStdoutFile(new File("out.txt"));
task.setStderrFile(new File("err.txt"));

Na sličan način, standardni ulazni kanal može biti pročitan iz postojeće datoteke, pozivanjem setStdinFile(java.io.File) metoda:

ProcessTask task = new ProcessTask(command, envs, directory);
task.setStdinFile(new File("in.txt"));

5. Kako da isplanirate procese iz fajla

Cron4j planer takođe može zakazati skup procesa iz fajla.

Morate pripremiti fajl, veoma sličan onima koje koristi UNIX crontab, i registrujte ga u Scheduler-u pozivajući scheduleFile(File) metod. Fajl može biti otkazan pozivom descheduleFile(File) metoda. Planirani fajlovi mogu se preuzeti pozivajući getScheduledFiles() metod.

Planirani fajlovi su obrađeni svakog minuta. Planer će pokrenuti svaki proces deklarisan u datoteci čiji zakazivan patern odgovara sadašnjem sistemu vremena.

Sintaksna pravila za zakazivanje cron4j datoteke su prijavljena u " Cron parser" paragrafu.

6. Izgradnja sopstvenog zadatka

Java.lang.Runnable objekat je najjednostavniji zadatak mogući, ali da preuzme kontrolu potrebno je da produžite it.sauronsoftware.cron4j.Task klasu. U najjednostavnijoj formi, sprovođenje Runnable ili proširenje Task-a su veoma slični poslovi: dok prvi zahteva run() metod, drugi zahteva primenu execute(TaskExecutionContext). Execute(TaskExecutionContext) metod pruža it.sauronsoftware.cron4j.TaskExecutionContext primer, koji Runnable.run() metod ne daje. Kontekst može da se koristi na sledeći način:

  • Zadatak može da komunicira sa svojim izvršiocima, obaveštavajući o svom unutrašnjem stanju sa tekstualnim opisom. Ovo se zove praćenje statusa. Ako ste zainteresovani za podršku praćenja statusa u vašem zadatku, morate da zamenite supportsStatusTracking() metod,koji bi trebalo da se vrati tačan. Kada je ovo učinjeno, u okviru execute(TaskExecutionContext) metoda u mogućnosti ste da pozovete kontekst setStatusMessage(String) metod. Ovo će propagirati vašu statusnu poruku zadatka svom izvršiocu. Statusna poruka, preko izvršitelja, može se preuzeti pomoću spoljašnjeg korisnika (videti " Executors" paragraf).

  • Zadatak može da komunicira sa svojim izvršiocem, obaveštavajući kompletni nivo sa numeričkom vrednošću. Ovo se zove praćenje potpunosti. Ako ste zainteresovani za podršku praćenja potpunosti u vašem zadatku, morate da zaobiđete supportsCompletenessTracking() metod,koji bi trebalo da se vrati tačno.Kada je to učinjeno, u okviru execute(TaskExecutionContext) metoda u mogućnosti ste da pozovete kontekst setCompleteness(double) metod, čija je vrednost između 0 i 1. Ovo će propagirati vaš nivo potpunosti zadatka svom izvršiocu. Nivo kompletnosti, preko izvršitelja, može se preuzeti pomoću spoljašnjeg korisnika (videti" Executors" paragraf).

  • Zadatak se može opciono prekinuti. Ako ste zainteresovani za podršku pauziranja i nastavljanja u svom zadatku, morate da zaobiđete canBePaused() metod,koji bi trebalo da se vrati tačno.Kada je ovo učinjeno, u okviru execute(TaskExecutionContext) metoda morate da povremeno pozovete kontekst pauseisRequested() metod.Ovo će pauzirati izvršenje zadatka dok se ne nastavi (ili zaustavi) od spoljašnjeg korisnika (videti" Executors" paragraf).

  • Zadatak može biti opciono zaustavljen. Ukoliko ste zainteresovani za podršku prekida u vašem zadatku, morate da zaobiđete canBeStopped() metod, koji bi trebalo da se vrati tačno. Kada je to učinjeno, u okviru execute(TaskExecutionContext) metoda morate da povremeno pozovete context isStopped() metod.To će se vratiti tačno, kada je zahtevano da izvršenje bude zaustavljeno od strane spoljašnjeg korisnika (videti" Executors" paragraf). Onda je vaša odgovornost da obradite taj događaj, tako što je vaš zadatak da blago zaustavite svoje tekuće aktivnosti.

  • Kroz kontekst, zadatak može da preuzme planer, pozivajući getScheduler().

  • Kroz kontekst, zadatak može da preuzme sheduler, nazivajući getTaskExecutor ().

Običan zadatak može biti zakazan, pokrenut odmah ili vraćen od strane kolekcionara zadataka.

7. Izgradnja sopstvenog kolektora

Možete da gradite i ubacujete u svoj planer zadataka izvora, kroz API metod zadataka.

Cron4j Planer podržava registraciju jedne ili više it.sauronsoftware.cron4j.TaskCollector instanci, uz addTaskCollector(TaskCollector) metod. Registrovani kolektori mogu se preuzeti sa scheduler getTaskCollectors() metodom.Prethodno registrovan kolektor može da se izvadi iz planera sa removeTaskCollector(TaskCollector) metodom. Kolektori mogu da se dodaju, pitaju ili uklone u svakom trenutku, i kada je sheduler počeo i kada je pokrenut.

Svaki registrovani kolektor zadataka se upita od strane planera jednom u minutu. Planer poziva kolektor getTasks() metod. Implementacija mora da vrati it.sauronsoftware.cron4j.TaskTable instancu. TaskTable je tabela koja povezuje zadatke i obrasce zakazivanja. Planer, kada je tabela preuzeta, će ispitati iskazane stavke, i izvršiti svaki zadatak čiji patern zakazivanja odgovara sadašnjem sistemu vremena.

Običan kolektor može da se koristi da veže planer spoljnim izvorom zadataka , odnosno bazom podataka ili XML fajlom, kojim se može upravljati i menjati u sadržaju i u vreme izvršavanja.

8.Izgradnja sopstvenog scheduler slušaoca

It.sauronsoftware.cron4j.SchedulerListener API se može koristiti za slušanje scheduler događaja.

SchedulerListener interfejs zahteva primenu sledećih metoda:

Vidite " Executors" paragraf za više informacija o radnim izvršiocima.

Kada je vaš SchedulerListener slučaj spreman, možete ga registrovati na Scheduler objektu pozivajući njegov addSchedulerListener(SchedulerListener) metod. Već registrovani slušaoci se mogu ukloniti pozivom removeSchedulerListener(SchedulerListener) metoda. Planer može da vrati bilo kog registrovanog slušaoca, getSchedulerListeners() metodom.

SchedulerListeeners se mogu dodati i ukloniti u svakom trenutku, cak i dok je raspored pokrenut

9. Izvršioci

Planer, nakon što je počeo, i dok radi, može se potražiti, da vrati svoje izvršioce. Izvršilac je sličan nitu. Izvršioci se koriste od strane planera da izvrše zadatke.

Pozivanjem Sheduler.getExecutingTasks () metoda možete dobiti izvršioce koji su trenutno u toku.

Takođe možete dobiti izvršioca kroz SchedulerListener instancu (vidi " Building your own scheduler listener" paragraf).

Svaki izvršilac, predstavljen sa it.sauronsoftware.cron4j.TaskExecutor primerom, stvara drugačije izvršenje zadatka.

Zadatak se može preuzeti sa getTask() metodom.

Stanje izvršioca može da se proveri sa isAlive() : vraća se tačno ako izvršilac trenutno radi.

Ako izvršilac radi, trenutni razgovor može biti zaustavljen dok izvršenje ne bude završeno, pozivajući join() metod.

supportsStatusTracking() metod se vraća tačno ako trenutno izvršavani zadatak podržava praćenje statusa.To znači da je zadatak da komunicira izvršiocu svoj status, predstavljen od strane stringa. Trenutna status poruka može biti vraćena, pozivom executor getStatusMessage() metoda.

supportsCompletenessTracking() metod vraća tačno ako trenutno izvršavani zadatak podržava praćenje celovitosti. To znači da je zadatak da komunicira izvršiocu svoj nivo potpunosti. Sadašnji nivo potpunosti može biti vraćen pozivom executor getCompleteness() metoda.Vraćene vrednosti su od 0 (zadatak je tek počeo i još uvek ništa nije urađeno) i 1 (zadatak završen).

canBePaused() metod vraća tačno ako trenutno izvršavani zadatak podržava pauziranje izvršenja. To znači da izvršenje zadatka može da se pauzira pozivom executor pause() metoda. Pause status izvršitelja može se proveriti sa isPaused() metodom. Pauziran izvršilac može biti nastavljen pozivom njegovog resume() metoda.

canBeStopped() metod se vraća tačan ako trenutno izvršavani zadatak podržava prekid izvršenja. To znači da izvršenje zadatka može da se zaustavi pozivom executor stop() metoda. Interruption status izvršitelja se može proveriti sa isStopped() metodom. Zaustavljeni izvršioci ne mogu da se rezimiraju.

getStartTime() metod vraća vremensku oznaku izveštaja vremena početka izvršioca ili vrednost manju od 0 ako izvršilac još nije počeo.

getScheduler() metod vraća planer koji je vlasnik izvršioca.

getGuid() metod vraća tekstualni GUID za izvršioca.

Izvršioci takođe nude jedan događajem pokrenut API, preko it.sauronsoftware.cron4j.TaskExecutorListener klase. TaskExecutorListener može da se doda TaskExecutor-u sa svojim addTaskExecutorListener(TaskExecutorListener) metodom. Slušaoci mogu da se uklone sa removeTaskExecutorListener(TaskEkecutorListener) metodom,a mogu se preuzeti sa getTaskExecutorListeners() metodom. TaskExecutorListener mora da sprovede sledeće metode:

  • executionPausing(TaskExecutor)
    Pozvan kada je izvršiocu traženo da pauzira trenutni zadatak. Dati parametar predstavlja izvornu TaskExecutor instancu.

  • executionResuming(TaskExecutor)
    Pozvan kada je izvršiocu traženo da se nastavi izvršenje prethodno pauziranog zadatka. Dati parametar predstavlja izvornu TaskExecutor instancu.

  • executionStopping(TaskExecutor)
    Pozvan kada je izvršiocu traženo da zaustavi izvršenje zadatka. Dati parametar predstavlja izvornu TaskExecutor instancu.

  • ExecutionTerminated(TaskExecutor, Throwable)
    Pozvan kada je izvršilac završio izvršenje zadatka. Prvi parametar predstavlja izvorni TaskExecutor primer, a drugi je opcioni izuzetak koji je izazvao zadatak da se prekine. Ako je zadatak uspešno završen, data vrednost je nula.

  • StatusMessageChanged(TaskExecutor, String)
    Pozvan svaki put kada se statusna poruka izvršenja menja. Prvi parametar predstavlja izvorni TaskExecutor primer, a drugi je nova poruka izdata od strane zadatka.

  • CompletenessValueChanged(TaskExecutor, double)
    Pozvan svaki put kad se vrednost kompletnosti izvršenja menja. Prvi parametar predstavlja izvorni TaskExecutor primer, a drugi je nova vrednost potpunosti (između 0 i 1) izdat od strane zadatka.

10. Ručno pokretanje zadatka

Ukoliko je planer počeo sa radom, moguće je ručno pokretanje zadatka, bez zakazivanja sa paternom. Metoda je Scheduler. launch(Task). Zadatak će biti odmah pokrenut, a TaskExecutor instaca se vraća pozivaocu. Vraćeni objekat može da se koristi za kontrolu izvršenja zadataka (pogledajte" Executors" paragraf).

11.Rad sa vremenskim zonama

Sheduler instance, po defaultu, rade sa default sistemom vremenske zone. Odnosno obrazac rasporeda čija je vrednost 0 2 *** će aktivirati svoj zadatak u 02:00 ujutru po podrazumevanom sistemu vremenske zone. Planeru može da se zahteva da radi u drugoj vremenskoj zoni, koja nije podrazumevani sistem. Pozovite Scheduler. setTimeZone(TimeZone) i Sheduler. getTimeZone() da kontroliše ovu funkciju.

Kada je standardna vremenska zona promenjena, sistemsko trenutno vreme je prilagođeno priloženoj zoni pre nego što je upoređeno sa registrovanim obrascima zakazivanja. Rezultat je da se svaki isporučeni obrazac zakazivanja tretira u skladu sa navedenom vremenskom zonom. Pretpostavimo situaciju:

  • Sistemsko vreme: 10:00
  • Sistemska vremenska zona: GMT +1
  • Sheduler vremenska zona: GMT+3

Planer, pre upoređivanja sistemskog vremena sa paternima, prevodi 10:00 sa GMT +1 na GMT +3. To znači da 10:00 postaje 12:00. A rezultatirano vreme se zatim koristi za planerovo aktiviranje zadataka. Dakle, u datoj konfiguraciji u datom trenutku, svaki zadatak zakazan kao 0 12 *** će biti pogubljen, a svaki 0 10 *** neće.

12.Daemon teme

Java Virtual Machine izlazi kada su jedine teme koje su pokrenute su sve daemon teme. Cron4j Planer može da se konfiguriše da se mreste samo demon teme . Da biste kontrolisali ovu funkciju pozovite Scheduler. setDaemon(boolean) metod. Ovaj metod mora da se pozove pre nego što je planer pokrenut. Default vrednost je lažna (false). Da biste proverili planerov trenutni daemon status pozovite Scheduler. isDaemon() metod.

13.Predictor

it.sauronsoftware.cron4j.Predictor klasa je u stanju da predvidi kada će obrazac biti uparen.

Pretpostavimo da želite da znate kada će planer izvršiti zadatak zakazan sa obrascem 0 3 * Jan-Jun, Sep-Dec Mon-Fri. Možete predvideti sledeće izvršenje zadatka pomoću prediktorove instance:

String pattern = "0 3 * jan-jun,sep-dec mon-fri";
Predictor p = new Predictor(pattern);
for (int i = 0; i < n; i++) {
	System.out.println(p.nextMatchingDate());
}

14. Cron parser (analizator)

it.sauronsoftware.cron4j.CronParser klasa može da se koristi za analiziranje crontab-like formatiranog fajla kao i tokove karaktera.

Ako želite da zakažete listu zadataka prijavljenih u crontab-nalik datoteci ne treba vam CronParser, jer možete to da uradite tako što ćete dodati fajl u planer, sa Scheduler. scheduleFile(File) metodom.

Razmislite da koristite CronParser ako vam Scheduler.scheduleFile(File) metod nije dovoljan. Na primer, možda ćete morati da donesete listu zadataka sa udaljenog izvora koji nije pretstavljiv kao java.io.File objekat (dokument na udaljenom serveru, DBMS skup rezultata i tako dalje). Da biste rešili problem možete da sprovedete svoj it.sauronsoftware.cron4j.TaskCollector,dobijajući prednost CronParser-a da analizira bilo koji sadržaj nalik crontab-u.

Možete da analizirate ceo fajl / stream, ali takođe možete da raščlanite samo jednu rečenicu.

Red može da bude prazan, može da sadrži komentar, ili to može biti red rasporeda.

Red koji ne sadrži nikakve znakove ili red samo sa karakterima prostora se smatra praznim.

Red čiji je prvi ne-prostor karakter je znak broja (#) se smatra komentarom.

Prazni redovi i redovi komentara se ignorišu od strane parsera.

Bilo kakvi drugi redeovi se analiziraju kao redovi zakazivanja.

Važeći red rasporeda poštuje sledeću strukturu:

scheduling-pattern [options] command [args]
  • Obrazac-zakazivanja je važeći obrazac rasporeda, prema definiciji koju je dala it.sauronsoftware.cron4j.SchedulingPattern klasa.
  • Opcije su spisak opcionih informacija koje koristi cron4j da pripremi okruženje izvršenja zadatka. Pogledajte ispod za detaljniji opis.
  • Command je komanda važećeg sistema, kao izvršni poziv.
  • Args je spisak opcionih argumenta za komandu.

Posle zakazivanja stavke obrasca, drugi tokeni u svakom redu su odvojeni prostor ili razgraničenja sa duplim znacima navoda (").

Navodnici razgraničenih stavki mogu iskoristiti prednost sledećih nizova:

  • \" - navodnici
  • \\ -back slash
  • \/- kosa crta
  • \b - back prostor
  • \f - form feed
  • \n - novi red
  • \r - CR carriage return
  • \t - horizontalni tab
  • \Ufour-hex-digits karakter u datom Unicode indeksu

Kolekcija opcija tokena može da sadrži jedan ili više od sledećih elemenata:

  • IN:fajl-put - preusmerava kanal standardnog ulaza komande navedenoj datoteci.
  • OUT:fajl-put-preusmerava kanal standardnog izlaza komande navedenoj datoteci.
  • ERR:Fajl-put-preusmerava kanal komande standardne greške ka navedenoj datoteci.
  • ENV:ime=vrednost - Definiše varijable okruženja u obimu komande.
  • DIR:directory-path- Postavlja putanju radnog direktorijuma za komandu. Ova funkcija nije podržana u slučaju da je izvršni JVM manji od 1,3.

Takođe je moguće zakazati pozivanje na metodu Java klase u okviru parser ClassLoder-a. Metod mora da bude statičan i mora da prihvati niz stringova kao jedini argument. Da biste aktivirali ove vrste metoda sintaksa je:

scheduling-pattern java:className#methodName [args]

#methodname deo se može izostaviti:u ovom slučaju main(String []) će biti pretpostavljen.

Napominjemo da se statičke metode pozivaju u okviru scheduler-a istog JVM, bez mrešćenja drugih spoljnih procesa. Tako IN, OUT, ERR, ENV i DIR opcije ne mogu da se primene.

Nevažeći redovi zakazivanja se odbacuju bez blokiranja procedure analize, ali poruka o grešci se šalje na aplikaciju standardnog kanala greške.

Važeći primeri:

0 5 * * * sol.exe
0,30 * * * * OUT:C:\ping.txt ping 10.9.43.55
0,30 4 * * * "OUT:C:\Documents and Settings\Carlo\ping.txt" ping 10.9.43.55
0 3 * * * ENV:JAVA_HOME=C:\jdks\1.4.2_15 DIR:C:\myproject OUT:C:\myproject\build.log C:\myproject\build.bat "Nightly Build"
0 4 * * * java:mypackage.MyClass#startApplication myOption1 myOption2




Published (Last edited): 12-05-2013 , source: http://www.sauronsoftware.it/projects/cron4j/manual.php