Schedule a single job for every minute using spring quartz scheduler

1515


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

  1. Job Scheduling
  2. Job Execution
  3. Job Persistence
  4. Transactions
  5. Clustering
  6. 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

  1. In Spring Quartz scheduler they are two parts of code will be their
  2. Scheduler Job Code
  3. 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);
	}

}