Il quarzo è un open source e gratuito, servizio di pianificazione completo lavoro che può essere integrato con, o usato insieme lato praticamente qualsiasi applicazione Java EE o Java SE - dal più piccolo applicazione stand-alone per il più grande sistema di e-commerce .
Quartz può essere utilizzato per creare programmi semplici o complesse per l'esecuzione di decine, centinaia o addirittura decine di migliaia di posti di lavoro; Offerte di lavoro i cui compiti sono definiti come componenti standard Java che possono eseguite praticamente qualsiasi cosa è possibile programmare loro di fare. Il quarzo Scheduler include molte funzionalità di classe enterprise, come le transazioni JTA e clustering.
Caratteristiche
- Runtime Environments:
- Quarzo può run incorporato in un'altra applicazione free standing
- quarzo può essere un'istanza in un server applicativo (o servlet container), e partecipare a transazioni XA
- quarzo può essere eseguito come un programma stand-alone (all'interno della propria Java Virtual Machine), da utilizzare tramite RMI
- quarzo può essere istanziato come un gruppo di programmi autonomi
- Job Scheduling:
- Lavoro sono in programma da eseguire quando si verifica un dato trigger. I trigger possono essere creati con quasi qualsiasi combinazione delle seguenti direttive ...
- a una certa ora del giorno (al millisecondo)
- in determinati giorni della settimana
- in certi giorni del mese
- in certi giorni dell'anno
- non in certi giorni elencati all'interno di un calendario registrata (quali le feste aziendali)
- ripetuto un determinato numero di volte
- ripetuto fino a quando una determinata ora / data li>
- ripetuto all'infinito
- ripetuto con un intervallo di ritardo
(Capacità di carico-equilibrio e fail-over)
Cosa c'è di nuovo in questa versione:
- Struttura di cambiamenti più significativi API:
- metodi API che restituiscono (o prendono come parametri) array ora ritornano (o meno) digitati collezioni. Ad esempio, invece di getJobGroupNames (): String [] ora abbiamo getJobGroupNames (): List
- Lavoro e l'identificazione di trigger si basa ora su JobKey e TriggerKey. Chiavi includono sia un nome e di gruppo. I metodi che operano su determinati lavori / trigger ora prendere tasti come il parametro. Ad esempio, getTrigger (tasto TriggerKey): Grilletto, piuttosto che getTrigger (String name, gruppo String):. Trigger
- Trigger è ora un'interfaccia, piuttosto che una classe. Allo stesso modo per SimpleTrigger, CronTrigger, etc.
- Nuovo DSL / API basata costruttore-per lavori di costruzione e trigger:
- Metodi di TriggerUtils legate alla semplice costruzione di date sono state spostate a nuova classe DateBuilder, che può essere utilizzato con le importazioni statiche per creare ben istanze data di inizio e di fine di trigger, etc.
- L'interfaccia StatefulJob è stato deprecato in favore di nuove annotazioni a livello di classe per le classi di lavoro (utilizzando sia le annotazioni produce equivalente a quello della vecchia interfaccia StatefulJob):
- ersistJobDataAfterExecution - indica lo scheduler di ri-memorizzare il contenuto del lavoro JobDataMap dopo l'esecuzione completa li>.
- isallowConcurrentExecution - indica lo scheduler per bloccare altre istanze dello stesso lavoro (per JobKey) l'esecuzione, quando si è già .
- Nuova annotazione:ExecuteInJTATransaction. L'aggiunta di questa annotazione a una classe di lavoro indica quarzo per avviare una transazione JTA prima di eseguire il lavoro (e si impegnano / rollback dopo il completamento / eccezione). La proprietà di configurazione 'wrapJobExecutionInUserTransaction' dalla versione 1.x esiste ancora, ma la nuova annotazione consente di sintonizzare il comportamento per posto di lavoro, mentre la proprietà di configurazione ha effetto su tutti i lavori.
- I cambiamenti significativi a uso di JobListener e TriggerListener:
- La rimozione di distinzione tra "globale" e ascoltatori "non globali"
- JobDetails e trigger non sono configurati con un elenco di nomi di ascoltatori a notificare, invece ascoltatori identificare quali posti di lavoro / trigger sono interessati.
- ascoltatori sono ora assegnati una serie di istanze Matcher -. che prevedono regole di corrispondenza per i lavori / trigger che desiderano ricevere gli eventi per
- ascoltatori sono ora gestiti tramite un API ListenerManager, piuttosto che direttamente con le API di pianificazione.
- La classe SchedulerException e la gerarchia di classe è stato ripulito.
- DateIntervalTrigger è stato rinominato CalendarIntervalTrigger (o più esattamente la classe concreta è ora CalendarIntervalTriggerImpl).
- Il concetto (proprietà) di "volatilità" dei posti di lavoro e trigger è stato eliminato.
- Nuova istruzione mancata accensione grilletto MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY lascia un trigger essere configurato in modo tale che sia selettivamente ignorato da tutti Misfire manipolazione. In altre parole, sparerà non appena possibile, senza alcun trattamento speciale - una grande opzione per migliorare le prestazioni soprattutto con configurazioni che hanno un sacco di one-shot (non ripetibile) trigger .
- metodo compareTo di trigger () si riferisce ora correttamente al suo metodo () uguali, in quanto mette a confronto chiave del trigger, piuttosto che la prossima volta fuoco. Un nuovo comparatore che ordina trigger secondo tempo il fuoco, la priorità e la chiave è stata aggiunta come Trigger.TriggerTimeComparator.
- Nuove funzionalità:
- Scheduler.clear () metodo fornisce modo conveniente (e pericoloso!) Per rimuovere tutti i posti di lavoro, trigger e calendari dal programmatore.
- Scheduler.scheduleJobs (Mappa triggersAndJobs, boolean replace) metodo fornisce un comodo aggiunta grosso dei posti di lavoro e trigger.
- Scheduler.unscheduleJobs (Lista triggerKeys) metodo fornisce un comodo massa Pianificazione dei posti di lavoro.
- Scheduler.deleteJobs (Lista jobKeys) metodo fornisce un comodo eliminazione di massa dei posti di lavoro (e trigger correlate).
- Scheduler.checkExists (JobKey jobKey) e Scheduler.heckExists (TriggerKey triggerKey) metodi fornisce metodo pratico per determinare l'unicità di lavoro chiavi / attivazione (al contrario di vecchi hanno di dover recuperare il lavoro / grilletto per nome e quindi verificare se il risultato è stato nullo).
- JDBCJobStore consente ora una serie di tabelle per essere utilizzato da più istanze di pianificazione distinti
- JDBCJobStore è ora in grado di memorizzare implementazioni non core trigger senza l'utilizzo di colonne BLOB, attraverso l'utilizzo della nuova interfaccia TriggerPersistenceDelegate, che può (opzionalmente) essere attuati da esecutori di tipi di trigger personalizzato.
- JDBCJobStore ora include una SybaseDelegate per una migliore compatibilità con Sybase
- espressioni Cron ora supportano la possibilità di specificare un offset per "ultimo giorno del mese" e "l'ultimo giorno della settimana del mese" espressioni. Per esempio:. "L-3" (tre giorni di nuovo dall'ultimo del mese) o "L-3W" (giorno della settimana più vicino al giorno tre giorni indietro dall'ultimo giorno del mese)
- file XML contenenti dati di pianificazione hanno ora un modo per specificare grilletto volte compensazioni avvia verso il futuro dal momento in cui il file viene elaborato (utile per i trigger che devono iniziare a sparare qualche tempo dopo l'applicazione viene avviata / distribuito).
- Da schema:
- file XML schema ora supporta specificando la proprietà 'priorità' di trigger.
- QuartzInitializerListener (e QuartzInitializerServlet) supporta nuovo parametro "wait-on-arresto", che farà sì che la pianificazione di attendere per l'esecuzione di lavori per completare prima fase di arresto, quando il contenitore Servlet è un-distribuzione dell'applicazione.
- Aggiunto DirectoryScanJob di posti di lavoro di base che della nave con quarzo, ha aggiunto anche il parametro minimo di età per FileScanJob pre-esistente.
- Aggiunta la possibilità di aggiungere il ServletContext nel SchedulerContext quando si utilizza QuartzInitializerListener o QuartzInitializerServlet per inizializzare quarzo all'interno di un'applicazione Web Java EE.
- Varie:
- I vari miglioramenti delle prestazioni, tra cui (ma non solo):
- Possibilità di trigger batch acquisire che sono pronti per essere licenziato, che possono fornire miglioramenti delle prestazioni per le utilità di pianificazione molto trafficate
- Metodi di aggiunta lotto / rimozione di posti di lavoro e trigger (vedi "Nuove funzioni")
- I trigger hanno una nuova opzione di istruzione tiro mancato, MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY, che può essere utile se non si necessita di mancata accensione gestione per il trigger (s), e vuole approfittare di un guadagno di prestazioni
- Varie correzioni di bug, per l'elenco completo vedi le note di rilascio da Jira: https://jira.terracotta.org/jira/secure/ReleaseNote.jspa?projectId=10282&version=10842
- DBCP non è più utilizzato per la connessione al database pooling, C3PO viene usato al posto.
- implementazioni JobFactory vengono ora inizializzati con (passato) un handle per il Scheduler.
- Tutti gli esempi confezionati negli esempi?? directory della distribuzione al quarzo sono stati aggiornati per sfruttare (dimostrare) la nuova API per la definizione di posti di lavoro e trigger.
Cosa c'è di nuovo nella versione 1.6.6:
- alcune importanti correzioni di bug
- un paio di piccoli miglioramenti
Requisiti
- Java 2 Standard Edition Runtime Environment
I commenti non trovato