Spring Quartz Scheduler
=======================
https://github.com/spring-boot-tutorials/spring-quartz-scheduler
In this article we will configure Spring Quartz Scheduler.
Create Initial Code Base
------------------------
- Go to https://start.spring.io/
- Add the following dependencies:
- spring-boot-starter-quartz
- spring-boot-starter-web
- lombok
- Click `Generate`
Dependencies
------------
Dependencies used in ``pom.xml``
.. code-block:: xml
org.springframework.boot
spring-boot-starter-quartz
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
Properties
----------
Add the following properties in ``src/main/resources/application.properties``:
.. code-block:: properties
spring.quartz.job-store-type=memory
Configuration
-------------
Let's create a new file ``src/main/java/com/example/spring_quartz_scheduler/SampleConfiguration.java``
.. code-block:: java
@Configuration
public class SampleConfiguration {
////////////////
// JOB DETAIL //
////////////////
// /**
// * Quartz Way
// */
// @Bean
// public JobDetail jobDetail() {
// return JobBuilder.newJob()
// .ofType(SampleJob.class)
// .storeDurably()
// .withIdentity("Qrtz_Job_Detail")
// .withDescription("Invoke Sample Job service...")
// .build();
// }
/**
* Spring Way
*/
@Bean
public JobDetailFactoryBean jobDetail() {
JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
jobDetailFactory.setJobClass(SampleJob.class);
jobDetailFactory.setDescription("Invoke Sample Job service...");
jobDetailFactory.setDurability(true);
return jobDetailFactory;
}
/////////////
// TRIGGER //
/////////////
// /**
// * Quartz Way
// */
// @Bean
// public Trigger trigger(JobDetail jobDetail) {
// return TriggerBuilder.newTrigger().forJob(jobDetail)
// .withIdentity("Qrtz_Trigger")
// .withDescription("Sample trigger")
// .withSchedule(simpleSchedule().repeatForever().withIntervalInSeconds(10))
// .build();
// }
/**
* Spring Way
*/
@Bean
public SimpleTriggerFactoryBean trigger(JobDetail job) {
SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
trigger.setJobDetail(job);
trigger.setRepeatInterval(1000);
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
return trigger;
}
///////////////
// SCHEDULER //
///////////////
// /**
// * Quartz Way
// */
// @Bean
// public Scheduler scheduler(Trigger trigger, JobDetail jobDetail, SchedulerFactoryBean factory) throws SchedulerException {
// Scheduler scheduler = factory.getScheduler();
// scheduler.scheduleJob(jobDetail, trigger);
// scheduler.start();
// return scheduler;
// }
// /**
// * Spring Way - autoconfigured by
// * org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration
// */
// @Bean
// public SchedulerFactoryBean scheduler(Trigger trigger, JobDetail jobDetail, DataSource quartzDataSource) {
// SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
// schedulerFactory.setConfigLocation(new ClassPathResource("quartz.properties"));
//
// schedulerFactory.setJobFactory(springBeanJobFactory());
// schedulerFactory.setJobDetails(jobDetail);
// schedulerFactory.setTriggers(trigger);
// schedulerFactory.setDataSource(quartzDataSource);
// return schedulerFactory;
// }
}
Sample Job
----------
Create a new file ``src/main/java/com/example/spring_quartz_scheduler/SampleJob.java``:
.. code-block:: java
public class SampleJob implements Job {
@Autowired
private SampleJobService jobService;
public SampleJob() {
System.out.println("SampleJob created");
}
public void execute(JobExecutionContext context) throws JobExecutionException {
this.jobService.doSomething();
}
}
Sample Job Service
------------------
Create a new file ``src/main/java/com/example/spring_quartz_scheduler/SampleJobService.java``:
.. code-block:: java
@Service
public class SampleJobService {
public void doSomething() {
System.out.println("Hello, World!");
}
}
Run & Verify Application
------------------------
Open terminal at project root and execute the following:
.. code-block:: sh
mvn spring-boot:run