Calling RESTFul API from Quartz Scheduler Example

  • Last updated Apr 25, 2024

Sometimes, you may need to call REST APIs from within your Scheduler application to accomplish tasks. In this tutorial, we will demonstrate how to invoke a remote REST API from within a Quartz scheduler's job.

If you're interested in learning how to integrate Quartz Scheduler in Spring Boot, we recommend checking out this example.

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

package com.example.payment.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/api/initiate-payment";
    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();
        }

    }

}