Sunday, March 22, 2015

Quartz Scheduler vs. Spring Scheduler

Spring @scheduler vs. Quartz Scheduler


Spring Scheduler is a truly light weight implementation that will suffice for simple scheduling needs. If you are using Spring 3.0, it provides annotation support for both Task Scheduling and Asynchronous method execution.  Spring Scheduler provides support for

  • Task Scheduling using FixedRate (Run periodically at specific intervals even if previous execution did not finish) & FixedDelay (Delay the next execution of the task for a specific time frame after completion of last execution)
  • Cron expression based scheduling
On the contrary, Quartz Scheduler is a full fledged open source library that provides support for Job Scheduling. Its comparatively complex than Spring Scheduler but provides support for enterprise level features like JTA and clustering. It comes with JobPersistence support that can be extremely beneficial for failed jobs as well as reporting purposes.
  • With the use of the included JDBCJobStore, all Jobs and Triggers configured as "non-volatile" are stored in a relational database via JDBC.
  • With the use of the included RAMJobStore, all Jobs and Triggers are stored in RAM and therefore do not persist between program executions - but this has the advantage of not requiring an external database. 
Clustering feature of Quartz can be used for Fail-safe and/or Load Balancing purposes. However, recommended approach is to run the nodes in a cluster on the same machine. In case, you need to implement the cluster across multiple machines, a time sync service daemon like http://www.boulder.nist.gov/timefreq/service/its.htm should be used to ensure that clocks are synchronized between these machines that are part of the cluster.

In essence, if your goal is to implement a quick and basic form of job/task scheduling then Spring Scheduler will be ideal. On the other hand, if you need clustering as well as JobPersistence support then Quartz may serve better.




Responsibilities Of A Leader

Someone asked me about 3 key responsibilities of a leader, #ResponsibilitiesOfALeader    1) Be available to your team. Give priority to your...