Calling Remote REST APIs From within the Quartz Scheduler's Jobs

Sometimes you may need to call REST APIs from within your Scheduler application to complete tasks, so in this tutorial, we will show you how to call a remote REST API from within a Quartz scheduler's job.

If you are looking for a sample scheduler application then we recommend you to see this example.

Here's a sample code to call remote REST APIs from within the Quartz scheduler's job:


package com.example.quartz.job;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.SchedulerException;
import org.quartz.TriggerKey;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;

public class ExampleJob implements Job {

    private static final String TARGET_API = "http://example.com/notifications";
    private RestTemplate restTemplate = new RestTemplate();

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        //get data from job detail
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        String paymentId = dataMap.getString("paymentId");
        
        System.out.println("Executing job for paymentId = " + paymentId);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        
        ExampleRequest exampleRequest = new ExampleRequest();
        exampleRequest.setPaymentId(paymentId);

        HttpEntity<ExampleRequest> httpExampleRequest =
                new HttpEntity<>(exampleRequest, headers);

        ExampleResponse exampleResponse = restTemplate.postForObject(TARGET_API,
                httpExampleRequest, ExampleResponse.class);
        
        System.out.println("Payment response =" + exampleResponse.getStatus());

        // if success delete and unschedule job
        try {
            context.getScheduler().deleteJob(new JobKey(paymentId));
            TriggerKey triggerKey = new TriggerKey(paymentId);
            context.getScheduler().unscheduleJob(triggerKey);

        } catch (SchedulerException e) {
            System.out.println("Payment failed =" + paymentId);
            e.printStackTrace();
        }

    }

}