Difference between Quartz Job and Scheduling Tasks with Spring?
Asked Answered
E

1

22

I am new to Spring-boot(version 1.3.6) and Quartz and I am wondering what is the difference between making a task with Spring-scheduler:

    @Scheduled(fixedRate = 40000)
    public void reportCurrentTime() {
        System.out.println("Hello World");
    }

And the Quartz way:

0. Create sheduler.
1. Job which implements Job interface.
2. Create JobDetail which is instance of the job using the builder  org.quartz.JobBuilder.newJob(MyJob.class)
3. Create a Triger
4. Finally set the job and the trigger to the scheduler

In code:

  public class HelloJob implements Job {

    public HelloJob() {
    }

    public void execute(JobExecutionContext context)
      throws JobExecutionException
    {
      System.err.println("Hello!");
    }
  }

and the sheduler:

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

  Scheduler sched = schedFact.getScheduler();

  sched.start();

  // define the job and tie it to our HelloJob class
  JobDetail job = newJob(HelloJob.class)
      .withIdentity("myJob", "group1")
      .build();

  // Trigger the job to run now, and then every 40 seconds
  Trigger trigger = newTrigger()
      .withIdentity("myTrigger", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
          .withIntervalInSeconds(40)
          .repeatForever())
      .build();

  // Tell quartz to schedule the job using our trigger
  sched.scheduleJob(job, trigger);

Does Quartz provide more flexible way to define Jobs, Triggers and Schedulers or Spring Scheduler has something else which is better?

Eliseelisee answered 25/7, 2016 at 9:27 Comment(0)
S
18

Spring Scheduler is an abstraction layer written to hide the implementations of Executors in different JDKs like Java SE 1.4, Java SE 5 and Java EE environments, which have their own specific implementations.

Quartz Scheduler is a fully fledged scheduling framework which allows CRON based or Simple periodic task execution.

Spring Scheduler does provide integration with Quartz scheduler in the form of a Trigger to use the full functionality of the Quartz scheduler.

Advantage of using Spring Scheduler without directly using the Quartz Scheduler specific classes is that the abstraction layer provides flexibility and loose coupling.

Sirup answered 25/7, 2016 at 10:54 Comment(2)
So normally we can say that using Spring Scheduler is a better choice? Though there might be some overhead compared to Quartz Scheduler?Murk
In Khalid Saleem's post and Features of Quartz, it seems Quartz is more powerful in cluster. And also based on the current Spring doc, it indeed seems using Quartz is much easier now.Murk

© 2022 - 2024 — McMap. All rights reserved.