[java] Quartz Scheduler에서 작업 간의 데이터 공유하기

Quartz Scheduler는 Java 애플리케이션에서 작업을 예약하고 실행하기 위한 유용한 라이브러리입니다. 때로는 Quartz 작업이 서로 데이터를 공유해야하는 경우가 있을 수 있습니다. 이번 포스트에서는 Quartz Scheduler에서 작업 간에 데이터를 공유하는 방법에 대해 알아보겠습니다.

작업 데이터 공유하기

Quartz 작업 간에 데이터를 공유하려면 JobDataMap을 사용할 수 있습니다. JobDataMap은 Quartz JobDetail 객체와 관련된 데이터를 저장하는 데 사용됩니다.

다음은 JobDataMap을 사용하여 작업 간에 데이터를 공유하는 예제입니다.

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // JobDataMap 가져오기
        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();

        // 데이터 가져오기
        String sharedData = (String) jobDataMap.get("sharedData");

        // 공유 데이터 사용하기
        System.out.println("공유 데이터: " + sharedData);
    }
}

위의 코드에서는 MyJob이라는 Quartz Job 인터페이스를 구현하는 작업을 정의합니다. execute 메서드 안에서 JobDataMap을 사용하여 공유 데이터를 가져올 수 있습니다.

작업 스케줄링하기

작업 간에 데이터를 공유하는 방법을 알았으므로, 작업을 스케줄링하여 실행하는 방법도 알아보겠습니다. Quartz Scheduler를 사용하여 작업을 스케줄링하는 방법에 대한 예제를 살펴보겠습니다.

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerExample {

    public static void main(String[] args) throws SchedulerException {
        // 스케줄러 팩토리 생성
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        // 작업과 작업에 필요한 데이터 생성
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("sharedData", "Hello, World!");

        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "group1")
                .usingJobData(jobDataMap)
                .build();

        // 트리거 생성
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .build();

        // 스케줄러에 작업과 트리거 등록
        scheduler.scheduleJob(jobDetail, trigger);

        // 스케줄러 시작
        scheduler.start();
    }
}

위의 코드에서는 SchedulerExample 클래스에서 Quartz 스케줄러를 생성하고, 작업(Job)과 트리거(Trigger)를 생성하여 스케줄러에 등록하는 방법을 보여줍니다. 작업에 필요한 데이터는 JobDataMap에 저장되어 작업 인스턴스가 생성될 때 사용됩니다.

결론

Quartz Scheduler를 사용하여 작업을 스케줄링하고 데이터를 공유하는 방법에 대해 알아보았습니다. JobDataMap을 사용하여 작업 간에 데이터를 전달하고 공유할 수 있습니다. 이를 통해 원활한 작업 스케줄링 및 데이터 공유를 구현할 수 있습니다.

참고 자료: