What is Quartz Scheduler
- Quartz Scheduler is open source java library for scheduling jobs from small applications to large applications.
- By using Quartz we can create thousands of scheduling jobs.
- Currently Quartz is under Apache.
Features of Quartz Scheduler
- Job Scheduling
- Job Execution
- Job Persistence
- Transactions
- Clustering
- Listeners
Quartz Scheduler VS Spring Quartz Scheduler
- Spring written wrapper on top of Quartz schedular for supporting with annotations and spring dependency injection.
- Spring Quartz schedular supports all features of Quartz with very less java code.
Spring program to schedule a job for every 1 minute
- In Spring Quartz scheduler they are two parts of code will be their
- Scheduler Job Code
- Scheduler Job Configuration
Scheduler code
package com.oc;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;
@Component
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext argContext) throws JobExecutionException {
System.out.println("I am scheduled on " + new Date(System.currentTimeMillis()));
}
}
Scheduler configurations code
package com.oc;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
import org.springframework.stereotype.Component;
@Component
public class MyScheduler {
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(MyJob.class).storeDurably().withIdentity("Qrtz_Job_Detail")
.withDescription("Job description...").build();
}
@Bean
public Trigger trigger(JobDetail job) {
return TriggerBuilder.newTrigger().forJob(job).withIdentity("My_Qrtz_Trigger")
.withDescription("Job trigger description")
.withSchedule(simpleSchedule().repeatForever().withIntervalInMinutes(1)).build();
}
@Bean
public Scheduler scheduler(Trigger trigger, JobDetail job) throws Exception {
StdSchedulerFactory factory = new StdSchedulerFactory();
factory.initialize(new ClassPathResource("quartz.properties").getInputStream());
Scheduler scheduler = factory.getScheduler();
scheduler.setJobFactory(new SpringBeanJobFactory());
scheduler.scheduleJob(job, trigger);
scheduler.start();
return scheduler;
}
}
Spring container Startup Code
package com.oc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyQuartzApplication {
public static void main(String[] args) {
SpringApplication.run(MyQuartzApplication.class, args);
}
}